1.安装prerender-spa-plugin
cnpm install prerender-spa-plugin --save-dev
2.在router.js看下路由模式是不是 ‘history’,不是的请换成history
mode : 'history', 注意 如果只是为了首屏预加载 则不需要改变路由
3.在vue.config.js配置
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');
module.exports = {
outputDir: "dist",
lintOnSave: true,
runtimeCompiler: false,
transpileDependencies: [
],
productionSourceMap: false,
devServer: {
port: 8081,
proxy: {
'/apis': {
target: 'http://101.132.34.30/',
changeOrigin: true,
pathRewrite: {
'^/apis': ''
}
}
}
},
configureWebpack: () => {
if (process.env.NODE_ENV !== 'production') return;
return {
plugins: [
new PrerenderSPAPlugin({
staticDir: path.join(__dirname, 'dist'),
routes: ['/', '/About', 'Text'],
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
renderAfterDocumentEvent: 'render-event'
})
}),
],
};
}
}
3.main.js配置
import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";
Vue.config.productionTip = false;
new Vue({
router,
store,
mounted() {
document.dispatchEvent(new Event('render-event'))},
render: h => h(App)
}).$mount("#app");
4.使用vue-meta-info插件,改变link、title、meta等
import MetaInfo from 'vue-meta-info'
export default {
metaInfo: {title: '',
meta: [
{name: 'description',content: '***是'},
{name: 'keywords',content: '****'}],},
data(){
return{}
}
}
5.注意坑
一,构建不成功
1. 报错
/node_modules/@prerenderer/renderer-puppeteer/node_modules/puppeteer/.local-chromium/linux-686378/chrome-linux/chrome: error while loading shared libraries: libX11.so.6: cannot open shared object file: No such file or directory
解决方案: 安装如下依赖
yum install libXScrnSaver atk java-atk-wrapper at-spi2-atk gtk3 libXt -y
2.安装以上依赖还是构建不成功,前端隐藏headless: false,
![]()
6.本地查看效果
项目打包文件dist下启动http-server服务
没有的话 cnpm install http-server -g
然后浏览器查看效果