谈谈我在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 Tips 使用DocumentFragment加快DOM渲染速度
Jun 28 Javascript
JavaScript 对象模型 执行模型
Oct 15 Javascript
jQuery插件开发基础简单介绍
Jan 07 Javascript
使用js写的一个简易的投票
Nov 27 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
Nov 30 Javascript
jQuery简单实现提交数据出现loading进度条的方法
Mar 29 Javascript
AngularJs Managing Service Dependencies详解
Sep 02 Javascript
基于JavaScript实现拖动滑块效果
Feb 16 Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
ant design charts 获取后端接口数据展示
May 25 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的几个常用数字判断函数代码
2012/04/24 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
javascript如何动态加载表格与动态添加表格行
2013/11/27 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
2014/04/12 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
BootStrap 可编辑表Table格
2016/11/24 Javascript
轻松实现jQuery添加删除按钮Click事件
2017/03/13 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
JavaScript继承与聚合实例详解
2019/01/22 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
Vue实现鼠标经过文字显示悬浮框效果的示例代码
2020/10/14 Javascript
python uuid模块使用实例
2015/04/08 Python
python实现泊松图像融合
2018/07/26 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
Python使用scipy模块实现一维卷积运算示例
2019/09/05 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
Python终端输出彩色字符方法详解
2020/02/11 Python
python rolling regression. 使用 Python 实现滚动回归操作
2020/06/08 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
英智兴达软件测试笔试题
2016/10/12 面试题
英文简历中的自我评价
2013/10/06 职场文书
就业推荐表自我鉴定
2014/03/21 职场文书
视光学专业自荐信
2014/06/24 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
爱国主义教育基地观后感
2015/06/18 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
升学宴家长致辞
2015/07/27 职场文书
小学语文教学随笔
2015/08/14 职场文书
医院岗前培训心得体会
2016/01/08 职场文书