谈谈我在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 Date对象 学习
Jul 12 Javascript
动态加载script文件的两种方法
Aug 15 Javascript
jQuery实现转动随机数抽奖效果的方法
May 21 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
JavaScript从数组的indexOf()深入之Object的Property机制
May 11 Javascript
轻松掌握JavaScript代理模式
Aug 26 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
JS字典Dictionary类定义与用法示例
Feb 01 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
Sep 22 Javascript
node.js如何操作MySQL数据库
Oct 29 Javascript
关于Javascript闭包与应用的详解
Apr 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
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php动态变量定义及使用
2015/06/10 PHP
php实现网站顶踩功能的完整前端代码
2015/07/19 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
Nodejs进阶:express+session实现简易登录身份认证
2017/04/24 NodeJs
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
介绍Python中的文档测试模块
2015/04/28 Python
python创建和删除目录的方法
2015/04/29 Python
在DigitalOcean的服务器上部署flaskblog应用
2015/12/19 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
python的pip有什么用
2020/06/17 Python
flask开启多线程的具体方法
2020/08/02 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
HTML5新特性之用SVG绘制微信logo
2016/02/03 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
教师演讲稿范文
2014/01/08 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
中文专业自荐书
2014/06/29 职场文书
四风之害观后感
2015/06/09 职场文书
爱的教育读书笔记
2015/06/26 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL