打包时出现: Unable to prerender all routes

周三工作打包的时候,npm run build 还像往常工作一样打包给后端,然后周四我正常修改问题,准备打包给后端的时候,就发现一直打包不了,然后界面就显示一直在打包中,打了20分钟,30分钟都没成功,最后暴出问题:[prerender-spa-plugin] Unable to prerender all routes!

 试了好久,终于打包成功了

在\node_modules\@prerenderer\renderer-puppeteer\es6\renderer.js中第113行

await page.goto(`${baseURL}${route}`, navigationOptions);

改为:

 await page.goto(`${baseURL}${route}`, {...navigationOptions, timeout:0} );

然后在vue.config.js中的代码

const webpack = require('webpack')
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');

module.exports = {
    publicPath: '/',
    outputDir: 'dist',
    lintOnSave: process.env.NODE_ENV !== 'production',
    productionSourceMap: false,
    pwa: {},
    // webpack-dev-server 相关配置
    devServer: {
        open: process.platform === 'darwin',
        host: '0.0.0.0',
        port: 8080,
        https: false,
        hotOnly: false,
        proxy: {
            // '/api': {
            '/webapi': {
                // target: 'http://www.xxxxxxxxx', // 线上地址
                ws: true,
                changeOrigin: true,
            }
        }
    }, // 设置代理 l,,l]
    // before: app => {}
    configureWebpack: () => {
        const info = new webpack.ProvidePlugin({
            $: 'jquery',
            jQuery: 'jquery',
            'windows.jQuery': 'jquery'
        })
        if (process.env.NODE_ENV !== 'production') {
            return {
                plugins: [
                    info
                ],
            };
        } else {
            return {
                plugins: [
                    info,
                    new PrerenderSPAPlugin({
                   
                        // 生成文件的路径,也可以与webpakc打包的一致。
                        // 下面这句话非常重要!!!
                        // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
                        staticDir: path.join(__dirname, 'dist'),
                        // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
                        routes: ['/', '/home', '/partner/login', '/notFond'
                        ],
                        // 这个很重要,如果没有配置这段,也不会进行预编译
                        server: {
                            proxy: {
                                "/webapi": {
                                    target: "http://11.11.101.1",
                                    secure: false
                                }
                            }
                        },
                        renderer: new PrerenderSPAPlugin.PuppeteerRenderer({
                            inject: {
                                foo: 'bar'
                            },
                            navigationOptions: {
                                timeout: 0,
                            },
                            // renderAfterTime: 5000,
                            // headless: false,
                            // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。
                            // renderAfterDocumentEvent: 'render-event'
                        })
                    })
                ],
            };
        }
    }
}

在main.js中

new Vue({
    router,
    store,
    render: h => h(App),
    mounted() {
        document.dispatchEvent(new Event('render-event'))
    },
}).$mount("#app");

然后在npm run build,就出现成功的提示了

Build complete. The dist directory is ready to be deployed.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值