谈谈我在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 相关文章推荐
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 Javascript
jQuery数组处理函数整理
Aug 03 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
使用JavaScriptCore实现OC和JS交互详解
Mar 28 Javascript
vue数据双向绑定的注意点
Jun 23 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
Angular实现的进度条功能示例
Feb 18 Javascript
Vue微信项目按需授权登录策略实践思路详解
May 07 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 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的autoload机制的实现解析
2012/09/15 PHP
PHP开启opcache提升代码性能
2015/04/26 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
jquery提示效果实例分析
2014/11/25 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
jquery 插件实现多行文本框[textarea]自动高度
2015/03/04 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
js判断节假日实例代码
2017/12/27 Javascript
微信小程序列表中item左滑删除功能
2018/11/07 Javascript
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
Python实现包含min函数的栈
2016/04/29 Python
Python解惑之True和False详解
2017/04/24 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
AJax面试题
2014/11/25 面试题
商务助理岗位职责
2013/11/13 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
民主生活会剖析材料
2014/09/30 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
单身申明具结书
2015/02/26 职场文书
寒假安全保证书
2015/02/28 职场文书
2019最新婚庆对联集锦!
2019/07/10 职场文书
汽车销售合同文本
2019/08/08 职场文书
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript
Java实现带图形界面的聊天程序
2022/06/10 Java/Android