谈谈我在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之卸载鼠标事件的代码
May 14 Javascript
js 居中漂浮广告
Mar 21 Javascript
jQuery替换字符串(实例代码)
Nov 13 Javascript
鼠标选择动态改变网页背景颜色的JS代码
Dec 10 Javascript
Javascript实现可旋转的圆圈实例代码
Aug 04 Javascript
JS实现IE状态栏文字缩放效果代码
Oct 24 Javascript
React进阶学习之组件的解耦之道
Aug 07 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
详解iview的checkbox多选框全选时校验问题
Jun 10 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
解决LayUI数据表格复选框不居中显示的问题
Sep 25 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 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
十大“创意”战术!
2020/03/04 星际争霸
PHP 断点续传实例详解
2017/11/11 PHP
php原生数据库分页的代码实例
2019/02/18 PHP
javascript 一些用法小结
2009/09/11 Javascript
js function使用心得
2010/05/10 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
Javascript前端UI框架Kit使用指南之kitjs事件管理
2014/11/28 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
Vue动态组件和异步组件原理详解
2019/05/06 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
vue3.0中友好使用antdv示例详解
2021/01/05 Vue.js
python使用PyFetion来发送短信的例子
2014/04/22 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python实现购物车程序
2018/04/16 Python
python使用Plotly绘图工具绘制柱状图
2019/04/01 Python
OpenCV 边缘检测
2019/07/10 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
python使用列表的最佳方案
2020/08/12 Python
某/etc/fstab文件中的某行如下: /dev/had5 /mnt/dosdata msdos defaults,usrquota 1 2 请解释其含义
2013/04/11 面试题
医院辞职信范文
2014/01/17 职场文书
电气工程自动化求职信
2014/03/14 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
个人承诺书格式范文
2015/04/29 职场文书
交心谈心活动总结
2015/05/11 职场文书
《半截蜡烛》教学反思
2016/02/19 职场文书
离婚协议书格式范本
2016/03/18 职场文书
创业计划书之物流运送
2019/09/17 职场文书
「SHOW BY ROCK!!」“雫シークレットマインド”组合单曲MV公开
2022/03/21 日漫