2023-12-27 02:18:19 +08:00

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(),
}
}
}