谈谈我在vue-cli3中用预渲染遇到的坑


Posted in Javascript onApril 22, 2020

前言

在开发自己的个人网站的时候后,选择了用vue来开发,不可避免的遇到要对seo做优化。鉴于目前页面也不多,因此首先采用的是预渲染的方式。

本来以为把插件一装,配置一配,咔咔咔就能搞定,结果发现并没有想的那么简单。因为首先就遇到了两个报错,折腾了半个晚上。

问题及解决方案

第一个报错:

Unable to prerender all routes!

这个问题是在设置好配置之后,build的时候报出来的。主要症状就是打开了浏览器后卡主不动,然后就强制退出了。

解决方案:

参考了github上的issus https://github.com/chrisvfritz/prerender-spa-plugin/issues/196

谈谈我在vue-cli3中用预渲染遇到的坑

很神奇的就好了!至于怎么神奇就后面再说?

第二个报错:

This relative module was not found:

这个报错也是编译的时候出现的。

解决方案:

routes里的前两个路由不要用懒加载的方式来写...?‍♀️

具体就是:

# vue.config.js
new PrerenderSPAPlugin({...
routes: ['/', '/pg1', '/pg2', '/pg3', '/pg4'],
...
# router/index.js
import Index from '../views/Index.vue'
import Pg1 from '../views/Pg1.vue'

const routes = [{
  path: '/',
  name: 'Index',
  component: Index, // 不要用懒加载
 },
 {
  path: '/pg1',
  name: 'Pg1',
  component: Pg1 // 不要用懒加载
 },
 {
  path: '/pg2',
  name: 'Pg2',
  component: () => import('../views/Pg2.vue'), // 可以用懒加载
 },

爬坑历程

第一个问题是最神奇的,按照他说的来说,就是不能渲染所有的路由,但我目前也就只有五个路由在配置里面,然后我减到两个路由还是报这个错,所以肯定不是路由的原因。按照github上的方案改写了之后,好像就好了。然后当时我就尽想着先编译成功再说,但等我回过头来,想再复现出来研究一下的时候,怎么都复现不出来...?‍♀️
当时时间也很晚了,没办法也就只好作罢了...

附上完整配置

# vue.config.js
const path = require('path');
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
  configureWebpack: () => {
  if (process.env.NODE_ENV === 'production') {
   console.log(process.env.NODE_ENV)
   return {
    plugins: [
     new PrerenderSPAPlugin({
      //要求-给的WebPack-输出应用程序的路径预渲染。
      staticDir: path.join(__dirname, './dist/fontend'),
      //必需,要渲染的路线。 
      routes: ['/', '/Pg1', '/Pg2', '/Pg3', '/Pg4'],
      //必须,要使用的实际渲染器,没有则不能预编译 
     
      renderer: new Renderer({
       inject: {
        foo: 'bar'
       },
       headless: false, //渲染时显示浏览器窗口。对调试很有用。 
       //等待渲染,直到检测到指定元素。
       //例如,在项目入口使用`document.dispatchEvent(new Event('custom-render-trigger'))` 
       renderAfterDocumentEvent: "render-event",
       renderAfterTime: 5000
      })
     })
    ]
   }
  } else {
   return;
  }

# main.js
new Vue({

 router,
 render: h => h(App),
 mounted() {
  document.dispatchEvent(new Event('render-event')) # 新增此句
 }
}).$mount('#app')

# router/index.js
import Index from '../views/Index.vue'
import Pg1 from '../views/Pg1.vue'
const routes = [{
  path: '/',
  name: 'Index',
  component: Index, // 不要用懒加载
 },
 {
  path: '/Pg1',
  name: 'Pg1',
  component: Pg1 // 不要用懒加载
 },
 {
  path: '/Pg2',
  name: 'Pg2',
  component: () => import('../views/Pg2.vue'), // 可以用懒加载
 },
 {
  path: '/Pg3',
  name: 'Pg3',
  component: () => import('../views/Pg3.vue'), // 可以用懒加载
 },
 {
  path: '/Pg4',
  name: 'Pg4',
  component: () => import('../views/Pg4.vue'), // 可以用懒加载
}]

参考链接
[1] vue-cli3.0预渲染 https://www.jianshu.com/p/813c21899540
[2]  Unable to prerender all routes! https://github.com/chrisvfritz/prerender-spa-plugin/issues/196

到此这篇关于谈谈我在vue-cli3中用预渲染遇到的坑的文章就介绍到这了,更多相关vue-cli3 预渲染内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
prototype 1.5 & scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
javascript 保存文件到本地实现方法
Nov 29 Javascript
PHP abstract与interface之间的区别
Nov 11 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
Jan 08 Javascript
JS截取与分割字符串常用技巧总结
Nov 10 Javascript
JS取数字小数点后两位或n位的简单方法
Oct 24 Javascript
AngularJS使用拦截器实现的loading功能完整实例
May 17 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
Aug 17 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
Oct 23 Javascript
基于js 字符串indexof与search方法的区别(详解)
Dec 04 Javascript
玩转Koa之koa-router原理解析
Dec 29 Javascript
Vue路由权限控制解析
Nov 09 Javascript
如何修改Vue打包后文件的接口地址配置的方法
Apr 22 #Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 #Javascript
JS脚本实现定时到网站上签到/签退功能
Apr 22 #Javascript
微信小程序实现手指拖动选项排序
Apr 22 #Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 #Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 #Javascript
Vue computed 计算属性代码实例
Apr 22 #Javascript
You might like
德劲1104的电路分析与改良
2021/03/01 无线电
php时间函数用法分析
2016/05/28 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
关于JavaScript的一些看法
2009/05/27 Javascript
juqery 学习之四 筛选过滤
2010/11/30 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
JS阻止用户多次提交示例代码
2014/03/26 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
JavaScript语言精粹经典实例(整理篇)
2016/06/07 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
微信小程序 动态修改页面数据及参数传递过程详解
2019/09/27 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[02:12]DOTA2英雄基础教程 变体精灵
2013/12/16 DOTA
详解Python编程中time模块的使用
2015/11/20 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python网络编程 使用UDP、TCP协议收发信息详解
2019/08/29 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
python 实现压缩和解压缩的示例
2020/09/22 Python
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
Java中compareTo和compare的区别
2016/04/12 面试题
声明struct x1 { . . . }; 和typedef struct { . . . }x2;有什么不同
2012/06/02 面试题
禁止酒驾标语
2014/06/25 职场文书
老人节主持词
2015/07/04 职场文书
JS中如何优雅的使用async await详解
2021/10/05 Javascript