vue-cli3.0如何使用prerender-spa-plugin插件预渲染
如何使用prerender-spa-plugin插件预渲染
vue-cli3.0版本
1.安装
cnpm install prerender-spa-plugin --save
2.vue-config.js中增加
const PrerenderSPAPlugin = require('prerender-spa-plugin'); const Renderer = PrerenderSPAPlugin.PuppeteerRenderer; const path = require('path'); module.exports = { configureWebpack: config => { if (process.env.NODE_ENV !== 'production') return; return { plugins: [ new PrerenderSPAPlugin({ // 生成文件的路径,也可以与webpakc打包的一致。 // 下面这句话非常重要!!! // 这个目录只能有一级,如果目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。 staticDir: path.join(__dirname,'dist'), // 对应自己的路由文件,比如a有参数,就需要写成 /a/param1。 routes: ['/', '/product','/about'], // 这个很重要,如果没有配置这段,也不会进行预编译 renderer: new Renderer({ inject: { foo: 'bar' }, headless: false, // 在 main.js 中 document.dispatchEvent(new Event('render-event')),两者的事件名称要对应上。 renderAfterDocumentEvent: 'render-event' }) }), ], }; } }
3.在main.js中增加
new Vue({ router, store, render: h => h(App), mounted () { document.dispatchEvent(new Event('render-event')) } }).$mount('#app')
4.router.js 中设置mode: “history”
5.运行npm run build,看一下生成的 dist 的目录里是不是有每个路由名称对应的文件夹。然后找个 目录里 的 index.html 用IDE打开,看文件内容里是否有该文件应该有的内容。有的话,就设置成功了
预渲染 prerender-spa-plugin尝试
背景:想给项目做一些优化,想尝试预渲染和SSR
- 这里说一下SSR
- 使用的技术栈是VUE
- 预渲染使用的是 prerender-spa-plugin 这个包
先说一下效果吧
这个感觉就是类似高级的骨架屏,不过他是一个真正的页面,只是没有数据,或者数据驱动渲染的一切。
使用这个插件 配置好几个预渲染的页面会 在build时提前讲这些页面渲染成浏览器可以直接打开的html文件。这样你在浏览器输入地址后,会直接得到这样一个页面,省去了渲染出页面的时间,因为在打包时这个页面就渲染完了,也就是我们提前预渲染了。
不好用的地方
说一些不好用的地方,比如我们我们做的是类似管理后台的页面,无论你进入什么也都需要先登陆,那么这个效果就会打折扣,毕竟无论预渲染了什么页面 都会被重定向到登录页。
使用
1、安装 如果不行可能需要翻墙或者找一些镜像包试试
npm i prerender-spa-plugin -S
2、配置 vue.config.js
module.exports = { ..., plugins: [ staticDir: path.join(__dirname, 'dist'), routes:['/home'], renderer: new Renderer({ inject: { foo: 'bar' }, renderAfterDocumentEvent: 'render-event' }) ], // 另一种写法 // config.pludaasdfgins.push( // new PrerenderSPAPlugin({ // staticDir: path.join(__dirname, 'dist'), // indexPath: path.join(__dirname, 'dist', 'index.html'), // routes:['/home'], // renderer: new Renderer({ // inject: { // foo: 'bar' // }, // headless: true, // renderAfterDocumentEvent: 'render-event' // }) // }) // ) }
prerender-spa-plugin 还有很多参数 具体可以去官网看
3、打包
npm run build
打包完成后在dist 文件(打包后的文件)里面有一个home的文件夹,里面有一个index.html 文件,当你 访问http:// …/home 页面时 就会直接调用这个页面。也可以直接用浏览器打开这个页面
坑点
1、打开生成的home/index.html 文件 会发现 有可能你的css js 引用的路径不对,导致你生成页面没有样式,此时需要处理路径使其调用到正确的css js。
- 方法1、可以手动打包完,改完路径,讲包扔给运维扔到服务器
- 方法2、使用 npm i replace-in-file 这个包写方法 替换 路径 这种就是纯自动化部署了
2、自动化部署时
- 如果使用了上面的方法1那没什么问题 毕竟 包是在我们这处理好的。
- 如果是方法2,自动话打包,那么jenkins在build时会有很多依赖,比如 prerender-spa-plugin 就使用了 chromium 安装时可能会失败这个需要注意,需要跟运维一起处理这些问题
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Vue+Vite项目初建(axios+Unocss+iconify)的实现
一个好的项目开始搭建总是需要配置许多初始化配置,本文就来介绍一下Vue+Vite项目初建(axios+Unocss+iconify)的实现,具有一定的参考价值,感兴趣的可以了解一下2024-02-02vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
今天小编就为大家分享一篇vue2.0 获取从http接口中获取数据,组件开发,路由配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-11-11VuePress在build打包时window document is not defined问题解决
这篇文章主要为大家介绍了VuePress在build打包时window document is not defined问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07vue3 onMounted异步函数同步请求async/await实现
这篇文章主要为大家介绍了vue3 onMounted初始化数据异步函数/同步请求async/await实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-07-07element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
这篇文章主要介绍了element-plus一个vue3.xUI框架(element-ui的3.x 版初体验),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-12-12
最新评论