若是你的應用程序初始展現 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