谈谈我在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 相关文章推荐
javascript Array数组对象的扩展函数代码
May 22 Javascript
JavaScript Chart 插件整理
Jun 18 Javascript
基于Jquery的温度计动画效果
Jun 18 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
JavaScript使用Prototype实现面向对象的方法
Apr 14 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
angular使用md5,CryptoJS des加密的方法
Jun 03 Javascript
vue中v-show和v-if的异同及v-show用法
Jun 06 Javascript
es6中使用map简化复杂条件判断操作实例详解
Feb 19 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
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
JavaScript箭头函数_动力节点Java学院整理
2017/06/28 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
[02:40]DOTA2超级联赛专访430 从小就爱玩对抗性游戏
2013/06/18 DOTA
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python re正则表达式模块(Regular Expression)
2014/07/16 Python
python类和继承用法实例
2015/07/07 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
四年级数学教学反思
2014/02/02 职场文书
税务干部鉴定材料
2014/02/11 职场文书
审计专业自荐信范文
2014/04/21 职场文书
环保倡议书500字
2014/05/15 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
委托书范本
2014/09/13 职场文书
婚宴新郎致辞
2015/07/28 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫
JDK8中String的intern()方法实例详细解读
2022/09/23 Java/Android