vue-cli3.0如何使用prerender-spa-plugin插件預渲染
如何使用prerender-spa-plugin插件預渲染
vue-cli3.0版本
1.安裝
cnpm install prerender-spa-plugin --save
2.vue-config.js中增加
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'),
// 對應(yīng)自己的路由文件,比如a有參數(shù),就需要寫成 /a/param1。
routes: ['/', '/product','/about'],
// 這個很重要,如果沒有配置這段,也不會進行預編譯
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應(yīng)上。
renderAfterDocumentEvent: 'render-event'
})
}),
],
};
}
}3.在main.js中增加
new Vue({
router,
store,
render: h => h(App),
mounted () {
document.dispatchEvent(new Event('render-event'))
}
}).$mount('#app')4.router.js 中設(shè)置mode: “history”
5.運行npm run build,看一下生成的 dist 的目錄里是不是有每個路由名稱對應(yīng)的文件夾。然后找個 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容。有的話,就設(shè)置成功了
預渲染 prerender-spa-plugin嘗試
背景:想給項目做一些優(yōu)化,想嘗試預渲染和SSR
- 這里說一下SSR
- 使用的技術(shù)棧是VUE
- 預渲染使用的是 prerender-spa-plugin 這個包
先說一下效果吧
這個感覺就是類似高級的骨架屏,不過他是一個真正的頁面,只是沒有數(shù)據(jù),或者數(shù)據(jù)驅(qū)動渲染的一切。
使用這個插件 配置好幾個預渲染的頁面會 在build時提前講這些頁面渲染成瀏覽器可以直接打開的html文件。這樣你在瀏覽器輸入地址后,會直接得到這樣一個頁面,省去了渲染出頁面的時間,因為在打包時這個頁面就渲染完了,也就是我們提前預渲染了。
不好用的地方
說一些不好用的地方,比如我們我們做的是類似管理后臺的頁面,無論你進入什么也都需要先登陸,那么這個效果就會打折扣,畢竟無論預渲染了什么頁面 都會被重定向到登錄頁。
使用
1、安裝 如果不行可能需要找一些鏡像包試試
npm i prerender-spa-plugin -S
2、配置 vue.config.js
module.exports = {
...,
plugins: [
staticDir: path.join(__dirname, 'dist'),
routes:['/home'],
renderer: new Renderer({
inject: {
foo: 'bar'
},
renderAfterDocumentEvent: 'render-event'
})
],
// 另一種寫法
// config.pludaasdfgins.push(
// new PrerenderSPAPlugin({
// staticDir: path.join(__dirname, 'dist'),
// indexPath: path.join(__dirname, 'dist', 'index.html'),
// routes:['/home'],
// renderer: new Renderer({
// inject: {
// foo: 'bar'
// },
// headless: true,
// renderAfterDocumentEvent: 'render-event'
// })
// })
// )
}prerender-spa-plugin 還有很多參數(shù) 具體可以去官網(wǎng)看
3、打包
npm run build
打包完成后在dist 文件(打包后的文件)里面有一個home的文件夾,里面有一個index.html 文件,當你 訪問http:// …/home 頁面時 就會直接調(diào)用這個頁面。也可以直接用瀏覽器打開這個頁面
坑點
1、打開生成的home/index.html 文件 會發(fā)現(xiàn) 有可能你的css js 引用的路徑不對,導致你生成頁面沒有樣式,此時需要處理路徑使其調(diào)用到正確的css js。
- 方法1、可以手動打包完,改完路徑,講包扔給運維扔到服務(wù)器
- 方法2、使用 npm i replace-in-file 這個包寫方法 替換 路徑 這種就是純自動化部署了
2、自動化部署時
- 如果使用了上面的方法1那沒什么問題 畢竟 包是在我們這處理好的。
- 如果是方法2,自動話打包,那么jenkins在build時會有很多依賴,比如 prerender-spa-plugin 就使用了 chromium 安裝時可能會失敗這個需要注意,需要跟運維一起處理這些問題
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中的無限加載vue-infinite-loading的方法
本篇文章主要介紹了Vue中的無限加載vue-infinite-loading的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04
Vue CLI項目 axios模塊前后端交互的使用(類似ajax提交)
這篇文章主要介紹了Vue-CLI項目-axios模塊前后端交互的使用詳解(類似ajax提交),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
Vue 3中常用的生命周期鉤子和監(jiān)聽器的操作方法
這篇文章主要介紹了Vue 3中常用的生命周期鉤子和監(jiān)聽器的操作方法,分析常用的一些生命周期鉤子和監(jiān)聽器可以幫助我們在組件中處理數(shù)據(jù)加載、狀態(tài)變化和響應(yīng)式更新,需要的朋友可以參考下2024-07-07

