export default async()

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);
  });
}