prerender-spa-plugin无法在服务器上运行

时间:2018-06-07 12:32:52

标签: javascript webpack vue.js url-routing single-page-application

我正在尝试在服务器上运行构建。但是通过预渲染,会发生以下错误。在桌面版本的ubuntu和macOS上,没有这样的问题,问题只是服务器端。我试过不同的服务器。

95% emittingError: Failed to launch chrome!                                               


TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

    at onClose (/home/phpuser/testPrerender/frontend/node_modules/puppeteer/lib/Launcher.js:255:14)
    at ChildProcess.helper.addEventListener (/home/phpuser/testPrerender/frontend/node_modules/puppeteer/lib/Launcher.js:245:60)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:194:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
[Prerenderer - PuppeteerRenderer] Unable to start Puppeteer
(node:2535) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'close' of null
(node:2535) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我在webpack中的prerender-spa-plugin设置:

new PrerenderSPAPlugin({
    // Required - The path to the webpack-outputted app to prerender.
    staticDir: _.outputPath,
    // Required - Routes to render.
    routes: ['/', '/abouts', '/mobile-apps', '/docs/service-fees', '/news', '/legal/Terms%20of%20use', '/legal/Refund%20policy', '/legal/Privacy%20Policy', '/legal/Notification%20o$
    renderer: new PrerenderSPAPlugin.PuppeteerRenderer({
      renderAfterDocumentEvent: 'render-event',
      headless: false,
    }),
  })

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,它在本地完美运行,但问题出在服务器上。我暂时的解决方法是减少在

routes: []

上传递的路由数量

答案 1 :(得分:0)

同样的问题是,npm run build 在本地成功,但部署到服务器时失败。 它很可能与 prerender-spa-plugin 3.x 中使用的 puppeteer 有关。 (参考:https://qiita.com/pokotyan/items/11806b8b77f4a3527951) 因为 CI 上的配置无权更改,所以我放弃了版本 3。 后来用了基于PhantomJS的v2.1.0,成功部署在服务器上。

vue-cli3 & "prerender-spa-plugin": "^2.1.0" vue.config.js

configureWebpack: {
    plugins: [
      new PrerenderSpaPlugin(
        // Absolute path to compiled SPA
        path.resolve(__dirname, './dist'),
        // List of routes to prerender
        ['/a', '/b', '/c', '/d', '/e'],
        {
          // options
          ignoreJSErrors: true,
        }
      )
    ],
}
相关问题