vue 预渲染 prerender-spa-plugin

最近项目上线要做运营,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‘,

}

),

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

时间: 2024-10-30 20:38:45

vue 预渲染 prerender-spa-plugin的相关文章

vue项目使用 prerender-spa-plugin 预渲染

由于项目要做seo优化,而用vue写成的spa页面谷歌浏览器等是抓取不到数据的.介于ssr和预渲染来说,后者相对来说要简单许多.所以采用了预渲染方式.采用插件prerender-spa-plugin使用 第一步:修改配置文件webpack.prod.conf.js 在 const webpackConfig = merge(baseWebpackConfig, {plugins: [ new webpack.DefinePlugin({ new PrerenderSpaPlugin(// Req

服务端预渲染之Nuxt(介绍篇)

现在前端开发一般都是前后端分离,mvvm和mvc的开发框架,如Angular.React和Vue等,虽然写框架能够使我们快速的完成开发,但是由于前后台分离,给项目SEO带来很大的不便,搜索引擎在检索的时候是在网页中爬取数据,由于单页面应用读取到的页面是几乎空白的,无法爬取到任何数据信息. <!DOCTYPE html> <html> <head> <meta charset=utf-8> <meta name=viewport content=&quo

vue-cli3.0预渲染

1.核心插件 cnpm install prerender-spa-plugin --save-dev 2.vue-config.js中 const path = require('path'); const PrerenderSPAPlugin = require('prerender-spa-plugin'); const Renderer = PrerenderSPAPlugin.PuppeteerRenderer; module.exports = { configureWebpack:

利用预渲染加速iOS设备的图像显示

    最近在做一个UITableView的例子,发现滚动时的性能还不错.但来回滚动时,第一次显示的图像不如再次显示的图像流畅,出现前会有稍许的停顿感. 于是我猜想显示过的图像肯定是被缓存起来了,查了下文档后发现果然如此. 后来在<Improving Image Drawing Performance on iOS>一文中找到了一些提示:原来在显示图像时,解压和重采样会消耗很多CPU时间:而如果预先在一个bitmap context里画出图像,再缓存这个图像,就能省去这些繁重的工作了. 接着我

优化-预渲染加速iOS设备的图像显示

    最近在做一个UITableView的例子,发现滚动时的性能还不错.但来回滚动时,第一次显示的图像不如再次显示的图像流畅,出现前会有稍许的停顿感. 于是我猜想显示过的图像肯定是被缓存起来了,查了下文档后发现果然如此. 后来在<Improving Image Drawing Performance on iOS>一文中找到了一些提示:原来在显示图像时,解压和重采样会消耗很多CPU时间:而如果预先在一个bitmap context里画出图像,再缓存这个图像,就能省去这些繁重的工作了. 接着我

基于 vue 全家桶的 spa 项目脚手架

项目简介 Github: https://github.com/hanan198501/vue-spa-template 我们基于 vue-cli 脚手架生成项目模板做了一些改造,加入了 vue-router ,vuex 等配套设施,本地 dev server 中加入了接口 mock 功能,还增加一个 build server 来预览 build 结果页面,前后端通过 spa 的方式实现分离,并相应做了分离后的联调,部署方案.通过这个项目模板,可以快速搭建起用于前后端分离后的单页应用开发环境,项

vue服务器端渲染

Vue.js 是构建客户端应用程序的框架.默认情况下,可以在浏览器中输出 Vue 组件,进行生成 DOM 和操作 DOM.然而,也可以将同一个组件渲染为服务器端的 HTML 字符串,将它们直接发送到浏览器,最后将这些静态标记"激活"为客户端上完全可交互的应用程序. 服务器渲染的 Vue.js 应用程序也可以被认为是"同构"或"通用",因为应用程序的大部分代码都可以在服务器和客户端上运行. 传统的SPA(单页应用(Single-Page Appli

Vue.js写一个SPA登录页面的过程

技术栈 vue.js 主框架 vuex 状态管理 vue-router 路由管理 一般过程 在一般的登录过程中,一种前端方案是: 检查状态:进入页面时或者路由变化时检查是否有登录状态(保存在cookie或者本地存储的值): 如果有登录态则查询登录信息(uid,头像等...)并保存起来:如果没有则跳转到登录页: 在登录页面(或者登录框),校检用户输入信息是否合法: 校检通过后发送登录请求:校检不成功则反馈给用户: 登录成功则从后端数据中取出session信息保存登录状态(可能需要跳转);登录不成功

vue条件渲染

v-if 在字符串模板中,如 Handlebars ,我们得像这样写一个条件块: <!-- Handlebars 模板 --> {{#if ok}} <h1>Yes</h1> {{/if}} 在 Vue.js ,我们使用 v-if 指令实现同样的功能: <h1 v-if="ok">Yes</h1> 也可以用 v-else 添加一个 "else" 块: <h1 v-if="ok"&g