vuepress-plugin-netlify-functions
Version:
The Plugin for VuePress 2, Support Netlify Functions
54 lines (53 loc) • 1.76 kB
JavaScript
import { extendsBundlerOptions } from './extendsBundlerOptions.js';
import { generateFunctions, generateNetlifyConfig, initialFunctions, netlifyServe, } from './netlify/index.js';
function initOptions(app, { sourceDirectory, destDirectory, proxyPrefix = '/api', }) {
return {
directory: {
source: [sourceDirectory || app.dir.source('.vuepress/functions')],
dest: destDirectory || app.dir.dest('functions'),
temp: app.dir.temp('functions'),
},
proxyPrefix,
};
}
const cache = {
options: {},
};
export function getOptions() {
return cache.options;
}
/**
*
* netlify function 插件,提供 netlify functions 支持
*
* @param options
*/
export function netlifyFunctionsPlugin(options = {}) {
return (app) => {
const opts = initOptions(app, options);
let server;
cache.options = opts;
return {
name: 'vuepress-plugin-netlify-functions',
onInitialized: async (app) => {
// 启动netlify functions server
if (!app.env.isBuild) {
// 初始化用户侧的 functions
await initialFunctions(app, opts);
server = await netlifyServe(opts);
}
},
onWatched: (app, watchers) => {
watchers.push(server);
},
extendsBundlerOptions: (bundlerOption, app) => {
extendsBundlerOptions(bundlerOption, app, opts, server.host);
},
onGenerated: async (app) => {
// 生成配置文件
generateNetlifyConfig(app, opts);
await generateFunctions(app, opts);
},
};
};
}