码迷,mamicode.com
首页 > 其他好文 > 详细

vue 预渲染 prerender-spa-plugin

时间:2019-08-26 14:49:39      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:int   err   dispatch   nts   dir   mode   重要   rtm   ons   

最近项目上线要做运营,vue单页面做运营很不友好

一开始用的这个配置

const PrerenderSPAPlugin = require(‘prerender-spa-plugin‘)
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
 
const webpackConfig = merge(baseWebpackConfig, {
    plugins: [
        // vue-cli生成的配置中就已有这个了,不要动
        new HtmlWebpackPlugin({
            filename: config.build.index,
            template: ‘index.html‘,
            inject: true,
            minify: {
                removeComments: true,
                collapseWhitespace: true,
                removeAttributeQuotes: true
            },
            chunksSortMode: ‘dependency‘
        }),
        
        // 在vue-cli生成的文件的基础上,只有下面这个才是我们要配置的
        new PrerenderSPAPlugin({
            // 生成文件的路径,也可以与webpakc打包的一致。
            // 下面这句话非常重要!!!
            // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
            staticDir: path.join(__dirname, ‘../dist‘),
            
            // 对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
            routes: [‘/‘, ‘/index‘, ‘/skin‘, ‘/slimming‘, ‘/exercise‘, ‘/alPay‘, ‘/wxPay‘],
            
            // 这个很重要,如果没有配置这段,也不会进行预编译
            renderer: new Renderer({
                inject: {
                  foo: ‘bar‘
                },
                headless: false,
                // 在 main.js 中 document.dispatchEvent(new Event(‘render-event‘)),两者的事件名称要对应上。
                renderAfterDocumentEvent: ‘render-event‘
            })
        })
    ]
})

本地打包成功一半一半,线上jenkins打包总是报一个chromium下载失败
 Failed to download Chromium
这个错误网上不少解决方案,都试了,没有最终解决问题

改了配置
new PrerenderSPAPlugin({
// 生成文件的路径,也可以与webpakc打包的一致。
// 下面这句话非常重要!!!
// 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
staticDir: path.join(__dirname, ‘../dist‘),
 
// 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。
routes: [‘/‘],
renderer: new PrerenderSPAPlugin.PuppeteerRenderer({//这样写renderAfterTime生效了
renderAfterTime: 5000
}),
这个配置也有问题,本地打包完全成功,jenkins打一个路由成功概率是一半一半,打两到三个路由失败概率大大提高,有的时候十一次成功一次,太夸张
 
最终的解决方案是
"prerender-spa-plugin": "^2.1.0",  prerender-spa-plugin降版本,从3版本降到了2版本,然后如下配置,jenkins打包也成功了
new PrerenderSPAPlugin(
// 生成文件的路径,也可以与webpakc打包的一致。
// 下面这句话非常重要!!!
// 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
//staticDir:
path.join(__dirname, ‘../dist‘),

// 对应自己的路由文件,比如index有参数,就需要写成 /index/param1。
// routes: [‘/‘, ‘/promotions/noised-optimized-rower-machine_32.html‘, ‘/product-detail/noised-optimized-rower-machine_16392658.html‘],
[‘/‘, ‘/promotions/noised-optimized-rower-machine_32.html‘],
// 这个很重要,如果没有配置这段,也不会进行预编译
/* renderer: new Renderer({
//routes:
[‘/‘,‘/promotions/noised-optimized-rower-machine_32.html‘/* ,‘/product-detail/noised-optimized-rower-machine_16392658.html‘ */
// routes: [‘/‘],
{
renderAfterTime: 5000,
//在一定时间后再捕获页面信息,使得页面数据信息加载完成
captureAfterTime: 50000,
//忽略打包错误
ignoreJSErrors: true,
phantomOptions: ‘--web-security=false‘,
maxAttempts: 10,
renderAfterDocumentEvent: ‘render-event‘,
}
 
),
 
 

vue 预渲染 prerender-spa-plugin

标签:int   err   dispatch   nts   dir   mode   重要   rtm   ons   

原文地址:https://www.cnblogs.com/pingpingdejia/p/11412250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!