【问题标题】:prerender-spa-plugin not working on the serverprerender-spa-plugin 在服务器上不起作用
【发布时间】:2018-11-17 09:00:27
【问题描述】:

我正在尝试在服务器上运行构建。但是通过预渲染,会出现以下错误。在 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,
    }),
  })

【问题讨论】:

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


    【解决方案1】:

    同样的问题是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,
            }
          )
        ],
    }
    

    【讨论】:

      【解决方案2】:

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

      上传递的路由数量
      路线:[]

      【讨论】:

      • 这真的不是一个解决办法,大多数情况下路由是绝对必要的,否则预渲染没有意义......
      • 我说的是临时修复,因为我的项目无法用于生产
      最近更新 更多