若是你的应用程序初始展现 loading 菊花图,而后经过 Ajax 获取内容,抓取工具并不会等待异步完成后再行抓取页面内容。
cnpm install prerender-spa-plugin --save复制代码
const PrerenderSPAPlugin = require('prerender-spa-plugin');
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
const path = require('path');
module.exports = {
configureWebpack: config => {
if (process.env.NODE_ENV !== 'production') return;
return {
plugins: [
new PrerenderSPAPlugin({
// 生成文件的路径,也能够与webpakc打包的一致。
// 下面这句话很是重要!!!
// 这个目录只能有一级,若是目录层次大于一级,在生成的时候不会有任何错误提示,在预渲染的时候只会卡着不动。
staticDir: path.join(__dirname,'dist'),
// 对应本身的路由文件,好比a有参数,就须要写成 /a/param1。
routes: ['/', '/product','/about'],
// 这个很重要,若是没有配置这段,也不会进行预编译
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),二者的事件名称要对应上。
renderAfterDocumentEvent: 'render-event'
})
}),
],
};
}
}复制代码
new Vue({
router,
store,
render: h => h(App),
mounted () {
document.dispatchEvent(new Event('render-event'))
}
}).$mount('#app')复制代码
history
。若是不设置history模式,也能运行和生成文件,每一个index.html文件的内容都会是同样的。因此必须使用
history
模式
忽然发现原来我一直有使用Gzip压缩文件的,这就很好了html
const PrerenderSPAPlugin = require('prerender-spa-plugin')
const Renderer = PrerenderSPAPlugin.PuppeteerRenderermodule.exports = {
plugins: [
//...
new PrerenderSPAPlugin({
staticDir: path.join(__dirname, 'dist'),
outputDir: path.join(__dirname, 'prerendered'),
indexPath: path.join(__dirname, 'dist', 'index.html'),
routes: ['/', '/about', '/some/deep/nested/route'],
postProcess(renderedRoute) {
renderedRoute.route = renderedRoute.originalPath
renderedRoute.html = renderedRoute.html.split(/>[\s]+</gmi).join('><')
if (renderedRoute.route.endsWith('.html')) {
renderedRoute.outputPath = path.join(__dirname, 'dist', renderedRoute.route)
}
return renderedRoute
}, minify: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
decodeEntities: true, keepClosingSlash: true,
sortAttributes: true
},
renderer: new Renderer({
inject: { foo: 'bar' },
maxConcurrentRoutes: 4
})
})
]
}复制代码
要想seo好,使用ssr服务端渲染,即服务端生成静态页面给客户端,交互的请结合Nuxt;或者不在服务端渲染,使用webpack的prerender-spa-plugin插件实现预编译,生成静态的 HTML,直接给浏览器,渲染的过程在本地。使用webpack按需加载压缩优化首页渲染vue
vue-cli3.0使用prerender-spa-plugin插件预渲染 :blog.csdn.net/lv5751394/a…git
使用 prerender-spa-plugin 插件进行简单预渲染vue-cli2.0:juejin.im/post/5e1eb1…github