谈谈我在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与CSS复习(《精通javascript》)
Jun 29 Javascript
javascript跨浏览器的属性判断方法
Mar 16 Javascript
了不起的node.js读书笔记之node的学习总结
Dec 22 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
Feb 13 Javascript
微信小程序多张图片上传功能
Jun 07 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
JS非行间样式获取函数的实例代码
Jun 05 Javascript
jQuery实现的导航条点击后高亮显示功能示例
Mar 04 jQuery
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
May 22 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
Jul 19 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 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
杏林同学录(二)
2006/10/09 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
2016/07/15 PHP
PHP对象实例化单例方法
2017/01/19 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
input链接页面、打开新网页等等的具体实现
2013/12/30 Javascript
对Web开发中前端框架与前端类库的一些思考
2015/03/27 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
Vue实现简单分页器
2018/12/29 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Python开发最牛逼的IDE——pycharm
2018/08/01 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python 占位符的使用方法详解
2019/07/10 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Python 解析xml文件的示例
2020/09/29 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
索引覆盖(Index Covering)查询含义
2012/02/18 面试题
学生个人求职自荐信格式
2013/09/23 职场文书
物业保安主管岗位职责
2013/12/25 职场文书
村班子对照检查材料
2014/08/18 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
CSS 左边固定宽右边自适应的6种方法
2022/05/15 HTML / CSS
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript