由于项目要做seo优化,而用vue写成的spa页面谷歌浏览器等是抓取不到数据的。介于ssr和预渲染来说,后者相对来说要简单许多。所以采用了预渲染方式。采用插件prerender-spa-plugin使用

第一步:修改配置文件webpack.prod.conf.js

const webpackConfig = merge(baseWebpackConfig, {
plugins: [
new webpack.DefinePlugin({

new PrerenderSpaPlugin(
// Required - The path to the webpack-outputted app to prerender.
path.join(__dirname, '../dist'),
// Required - Routes to render.
[ '/','/wap/Runescape-3.Gold','/wap/Runescape-2007.Gold','/wap/RS-07-Accounts.account','/wap/Runescape-2007.FireCape','/wap/customer/message.html' ],
{
//在一定时间后再捕获页面信息,使得页面数据信息加载完成
captureAfterTime: 10000,
//忽略打包错误
maxAttempts: 10,
}
)
打包发现一直报超时错误,后面发现我在index.html文件写了一段判断设备是移动端还是pc端的js代码,可能是判断不出来导致一直打包不了,删了就好了。

最后发现可以打包,但打开页面发现动态获取数据的部分展示不出来,最后网上查看发现了一个问题,一个很关键的问题,就是

要把app.vue文件的最外面容器的id要设置成和index.html一样

//index.html
<body>
<div id="app"></div>
</body>

// app.vue
<template>
<div id="app"></div>
</template>
改完后就ok了。

一定要加上延时渲染,captureAfterTime: 10000, 不然预渲染出来的页面是没有数据的。因为接口获取数据需要时间

打包上线后报错 webpackJsonp is not defined。这是因为公共文件必须在自己引用的js文件之前引用。

可以手动改文件引用,但是推荐以下解决办法:

找到build→webpack.prod.conf.js→找到HtmlWebpackPlugin插件,添加如下配置即可

chunks: ['manifest', 'vendor', 'app']
改了后发现依然报错,而查看渲染的页面发现位置没错

那为什么报错呢

经过仔细查看,发现那两个报错的js文件删了也没问题,后来查看没有预渲染的页面是没有这两个js文件的,也就是说这2个js文件是由上图3个js文件生成的,这2个js文件是用来动态生成dom页面的。然而我们预渲染把这2个文件生成出来了,而且是放在head标签里的,这时还没执行到上图3个js文件,所以肯定报错。目前比较笨的方法就是手动删除这2个js。

最后一个问题:每次打开页面和刷新页面,整个页面布局变得特别混乱。过了大概1s左右页面就正常了,起初以为是不是样式没有加载。后面调试发现样式正常加载的啊?那是什么鬼问题,按理说link加载样式在head标签,肯定是加载完再加载body啊。

看了半天没有看出个所以然来,后面偶然撇了一眼渲染后的页面

我去!!!,这个font-size:46.222px是什么鬼?这么大的字体能不造成页面混乱吗。这才恍然大悟,因为是移动端,加了段动态判定设备的浏览器可视区宽度来设定根字体大小的js。然后在预渲染时,根本没有浏览器窗口这个数据,估计是以电脑屏幕大小判定了。结果给了个惊人的字体大小。所以每次打开页面的第一时间是预渲染的页面。经过再次判定后调回正常,所以出现了短暂的布局混乱。目前没想到什么好的方法去改,只能手动修改字体大小。
---------------------
作者:二叶扁舟
来源:CSDN
原文:https://blog.csdn.net/u010276653/article/details/79933233
版权声明:本文为博主原创文章,转载请附上博文链接!

vue项目使用 prerender-spa-plugin 预渲染的更多相关文章

  1. 什么是服务端渲染、客户端渲染、SPA、预渲染,看完这一篇就够了

    服务端渲染(SSR) 简述:     又称为后端渲染,服务器端在返回html之前,在html特定的区域特定的符号里用数据填充,再给客户端,客户端只负责解析HTML.     鼠标右击点击查看源码时,页 ...

  2. 在Vue项目中 选择图片并预览

    最近开始使用vue做项目 在这个过程中,碰到了大多数做前端肯定经历的一个问题,就是文件上传预览 花了点时间解决,因此分享一下预览功能的解决方案 页面: <div class="sele ...

  3. vue项目echarts画布删除历史数据重新渲染数据

    vue用到echarts时,根据select多选下拉框进行echarts折线图渲染.发现折现只能增加不能减少,后来根据echarts API文档发现 调用方式: chart.setOption(opt ...

  4. vue项目中编写一个图片预览的公用组件

    今天产品提出了一个查看影像的功能需求. 在查看单据的列表中,有一列是影像字段,一开始根据单据号调用接口查看是否有图片附件,如果有则弹出一个全屏的弹出层,如果没有给出提示.而且,从列表进入详情之后,附件 ...

  5. Vue项目预渲染机制引入实践

    周末想顺便把已经做好静态页面的webApp项目做一下SEO优化,由于不想写蹩脚的SSR代码,所以准备采用预渲染,本来想着网上有这么多预渲染的文章,随便找个来跟着做不就完了嘛,结果年轻的我付出了整个周末 ...

  6. Prerender.io - 预渲染架构,提高AngularJS SEO

    近些年来,越来越多的JavaScript框架(即AngularJS,BackboneJS,ReactJS)变得越来越流行.许多公司和开发人员使用这些JavaScript框架开发应用程序.这些框架有很多 ...

  7. prerender-spa-plugin预渲染踩坑

    为什么要使用预渲染? 为了应付SEO(国内特别是百度)考虑在网站(vue技术栈系列)做一些优化.大概有几种方案可以考虑: 服务端做优化: 第一,ssr,vue官方文档给出的服务器渲染方案,这是一套完整 ...

  8. Vue项目预渲染机制

    我们知道SPA有很多优点,不过一个缺点就是对(不是Google的)愚蠢的搜索引擎的SEO不友好,为了照顾这些引擎,目前主要有两个方案:服务端渲染(Server Side Rendering).预渲染( ...

  9. 用prerender-spa-plugin插件Vue项目优化SEO做ssr服务端渲染及预渲染

    今天在做公交的时候没干,用手机看看文章,偶然发现了一个关于Vue优化seo的文章,我先是在Vue的官方文档看了一篇关于Vue做SEO优化的文章. 上面提到了nuxt.js这个框架,这个框架我做过一个小 ...

随机推荐

  1. linux线程及互斥锁

    进程是资源管理的最小单元,线程是程序执行的最小单元.在操作系统的设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销. 就像进程有一个PID一样,每个线程也有 ...

  2. 3.python元类编程

     1.1.propety动态属性 在面向对象编程中,我们一般把名词性的东西映射成属性,动词性的东西映射成方法.在python中他们对应的分别是属性self.xxx和类方法.但有时我们需要的属性需要根据 ...

  3. [ 搭建Redis本地服务器实践系列三 ] :图解Redis客户端工具连接Redis服务器

    上一章 [ 搭建Redis本地服务器实践系列二 ] :图解CentOS7配置Redis  介绍了Redis的初始化脚本文件及启动配置文件,并图解如何以服务的形式来启动.终止Redis服务,可以说我们的 ...

  4. 1. Java面向对象之泛型-认识泛型

    package generic; class Point{ private  Object x; private  Object y; public Object getX() { return x; ...

  5. Python 员工信息管理系统

    学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...

  6. 从头到尾彻底解析Hash 表算法

    作者:July.wuliming.pkuoliver  出处:http://blog.csdn.net/v_JULY_v.  说明:本文分为三部分内容,    第一部分为一道百度面试题Top K算法的 ...

  7. nsqlookupd.go

    )     }     l.Lock()     l.httpListener = httpListener     l.Unlock()     httpServer := newHTTPServe ...

  8. NSQ源码剖析之nsqd

    NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障.故障容错.高可用性以及能够保证消息的 ...

  9. Spring IOC(二)容器初始化

    本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...

  10. Supervisor守护DotNet Core控制台程序

    Supervisor 相信对Linux系统很熟的都知道这个软件,基于Python写的一个守护进程软件.具体的介绍和使用我就不再赘述了. 使用asp.net core 部署在Linux常用的方法 我们可 ...