谈谈我在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入门教程(5) js Screen屏幕对象
Jan 31 Javascript
jquery下实现overlay遮罩层代码
Aug 25 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
js图片轮播特效代码分享
Sep 07 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
Apr 17 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
Aug 16 Javascript
深入理解jQuery.data() 的实现方式
Nov 30 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
Mar 04 Javascript
javaScript实现滚动条事件详解
Mar 24 Javascript
angularJs select绑定的model取不到值的解决方法
Oct 08 Javascript
JS实现字体背景跑马灯
Jan 06 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
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
JQuery 绑定事件时传递参数的实现方法
2009/10/13 Javascript
jQuery DOM操作小结与实例
2010/01/07 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
jQuery学习笔记之基础中的基础
2015/01/19 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
2016/05/09 Javascript
详解JavaScript节流函数中的Throttle
2016/07/16 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
浅谈JavaScript_DOM学习篇_图片切换小案例
2019/03/19 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
为Python的Tornado框架配置使用Jinja2模板引擎的方法
2016/06/30 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
五种Python转义表示法
2020/11/27 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
巴西购物网站:Onofre Agora
2020/06/08 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
党员“四风”方面存在问题及整改措施
2014/09/24 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
Mysql如何查看是否使用到索引
2022/12/24 MySQL