最近項目上線要做運營,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',
}
),