48 lines
1.9 KiB
TypeScript
48 lines
1.9 KiB
TypeScript
/**
|
|
* 如果是一个 仅 提供 functions 支持的插件,
|
|
* 基本上可以照搬本文件进行插件声明
|
|
* 然后在此基础上进行修改
|
|
*/
|
|
|
|
// 通过引入 'vuepress-plugin-netlify-functions' 插件,来为本插件提供
|
|
// netlify functions 开发时支持
|
|
import type { App, Plugin } from '@vuepress/core'
|
|
import { getDirname, path } from '@vuepress/utils'
|
|
import { useNetlifyFunctionsPlugin } from 'vuepress-plugin-netlify-functions'
|
|
import type { PageCollectionOptions } from '../shared/index.js'
|
|
|
|
const __dirname = getDirname(import.meta.url)
|
|
|
|
export function pageCollectionPlugin(_options: PageCollectionOptions = {}): Plugin {
|
|
return (app: App) => {
|
|
const {
|
|
// 客户端发起 functions 请求时的代理前缀
|
|
// 默认是 /api
|
|
// /api/* 的请求实际被转发到了 netlify functions 服务器的 /.netlify/functions/*
|
|
proxyPrefix,
|
|
// 在开发环境中,需要将 自定义到 functions 文件,注入到 netlify functions 服务中
|
|
// 这样才能够被请求到
|
|
preparePluginFunctions,
|
|
// vuepress 构建生产包时,打包这些 functions文件到 vuepress dest中。
|
|
generatePluginFunctions,
|
|
} = useNetlifyFunctionsPlugin(app, {
|
|
// 一般来说, 都是设置为 path.join(__dirname, 'functions')
|
|
// 即是当前文件同级的 functions 目录
|
|
// 这个目录的文件都会被监听,然后注入到 netlify functions 服务中
|
|
directory: path.join(__dirname, 'functions'),
|
|
})
|
|
return {
|
|
name: '@vuepress-plume/plugin-page-collection',
|
|
define: () => ({
|
|
// 将 proxyPrefix 注入到 客户端中
|
|
// 以便获取使用
|
|
__COLLECTION_PROXY_PREFIX__: proxyPrefix,
|
|
}),
|
|
clientConfigFile: path.resolve(__dirname, '../client/clientConfig.js'),
|
|
// 不要忘了,需要在这里 定义好 钩子
|
|
onPrepared: () => preparePluginFunctions(),
|
|
onGenerated: () => generatePluginFunctions(),
|
|
}
|
|
}
|
|
}
|