in packages/plugin-ssr/src/index.ts [16:67]
export default async (api: PluginAPI, options: IOption) => {
const { devServerRender = false, microApp } = options;
api.registerCommand('ssr:render', {
usage: `breezr ssr:render [options] <file>`,
description: 'get ssr result',
options: {
'--config': 'console config 的 json 文件',
'--path': '要渲染的路由'
}
}, renderCmdHandler);
api.registerCommand('ssr:doctor', {
usage: `breezr ssr:doctor [options] <file>`,
description: '对 ssr 结果做测试,发现问题',
details: '对 ssr 结果做测试,发现问题',
options: {
'--config': 'console config 的 json 文件',
'--path': '要渲染的路由',
'--renderNumber': '渲染次数',
'--snapshot': '输出 js 的堆栈',
}
}, doctorCmdHandler);
if (getEnv().isDev() && !devServerRender) {
return;
}
// ssr for dev env
api.dispatchSync('registerBeforeDevStart', async () => {
await buildServer(api, options)
await watchAndBuild(api, options);
});
api.on('onChainWebpack', async (config: Chain) => {
const originBefore = config.devServer.get('before');
config.devServer.before((app, server, compiler) => {
app.use(serveSSR(path.resolve(config.output.get('path'), 'server/index.js'), compiler));
if (originBefore) {
originBefore(app, server, compiler)
}
})
if (microApp) {
api.dispatchSync('configMicroAppSSREntry', `${config.output.get('publicPath')}server/index.js`)
}
});
// ssr for prod build
api.dispatchSync('registerBeforeBuildStart', async () => {
await buildServerBundle(api, options);
});
}