vue-cli3.0如何使用prerender-spa-plugin插件預(yù)渲染
如何使用prerender-spa-plugin插件預(yù)渲染
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打包的一致。
// 下面這句話非常重要!?。?
// 這個(gè)目錄只能有一級(jí),如果目錄層次大于一級(jí),在生成的時(shí)候不會(huì)有任何錯(cuò)誤提示,在預(yù)渲染的時(shí)候只會(huì)卡著不動(dòng)。
staticDir: path.join(__dirname,'dist'),
// 對(duì)應(yīng)自己的路由文件,比如a有參數(shù),就需要寫成 /a/param1。
routes: ['/', '/product','/about'],
// 這個(gè)很重要,如果沒有配置這段,也不會(huì)進(jìn)行預(yù)編譯
renderer: new Renderer({
inject: {
foo: 'bar'
},
headless: false,
// 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對(duì)應(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.運(yùn)行npm run build,看一下生成的 dist 的目錄里是不是有每個(gè)路由名稱對(duì)應(yīng)的文件夾。然后找個(gè) 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容。有的話,就設(shè)置成功了
預(yù)渲染 prerender-spa-plugin嘗試
背景:想給項(xiàng)目做一些優(yōu)化,想嘗試預(yù)渲染和SSR
- 這里說一下SSR
- 使用的技術(shù)棧是VUE
- 預(yù)渲染使用的是 prerender-spa-plugin 這個(gè)包
先說一下效果吧
這個(gè)感覺就是類似高級(jí)的骨架屏,不過他是一個(gè)真正的頁面,只是沒有數(shù)據(jù),或者數(shù)據(jù)驅(qū)動(dòng)渲染的一切。
使用這個(gè)插件 配置好幾個(gè)預(yù)渲染的頁面會(huì) 在build時(shí)提前講這些頁面渲染成瀏覽器可以直接打開的html文件。這樣你在瀏覽器輸入地址后,會(huì)直接得到這樣一個(gè)頁面,省去了渲染出頁面的時(shí)間,因?yàn)樵诖虬鼤r(shí)這個(gè)頁面就渲染完了,也就是我們提前預(yù)渲染了。
不好用的地方
說一些不好用的地方,比如我們我們做的是類似管理后臺(tái)的頁面,無論你進(jìn)入什么也都需要先登陸,那么這個(gè)效果就會(huì)打折扣,畢竟無論預(yù)渲染了什么頁面 都會(huì)被重定向到登錄頁。
使用
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 文件(打包后的文件)里面有一個(gè)home的文件夾,里面有一個(gè)index.html 文件,當(dāng)你 訪問http:// …/home 頁面時(shí) 就會(huì)直接調(diào)用這個(gè)頁面。也可以直接用瀏覽器打開這個(gè)頁面
坑點(diǎn)
1、打開生成的home/index.html 文件 會(huì)發(fā)現(xiàn) 有可能你的css js 引用的路徑不對(duì),導(dǎo)致你生成頁面沒有樣式,此時(shí)需要處理路徑使其調(diào)用到正確的css js。
- 方法1、可以手動(dòng)打包完,改完路徑,講包扔給運(yùn)維扔到服務(wù)器
- 方法2、使用 npm i replace-in-file 這個(gè)包寫方法 替換 路徑 這種就是純自動(dòng)化部署了
2、自動(dòng)化部署時(shí)
- 如果使用了上面的方法1那沒什么問題 畢竟 包是在我們這處理好的。
- 如果是方法2,自動(dòng)話打包,那么jenkins在build時(shí)會(huì)有很多依賴,比如 prerender-spa-plugin 就使用了 chromium 安裝時(shí)可能會(huì)失敗這個(gè)需要注意,需要跟運(yùn)維一起處理這些問題
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue中的無限加載vue-infinite-loading的方法
本篇文章主要介紹了Vue中的無限加載vue-infinite-loading的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
Vue CLI項(xiàng)目 axios模塊前后端交互的使用(類似ajax提交)
這篇文章主要介紹了Vue-CLI項(xiàng)目-axios模塊前后端交互的使用詳解(類似ajax提交),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
前端Vue手機(jī)號(hào)校驗(yàn)以及后端Java手機(jī)號(hào)校驗(yàn)例子
接收一個(gè)輸入的手機(jī)號(hào),判斷輸入的手機(jī)號(hào)是否正確是一個(gè)很常見的功能,這篇文章主要給大家介紹了關(guān)于前端Vue手機(jī)號(hào)校驗(yàn)以及后端Java手機(jī)號(hào)校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2023-11-11
Vue3在router中使用pinia報(bào)錯(cuò)的簡(jiǎn)單解決辦法
這篇文章主要給大家介紹了關(guān)于Vue3在router中使用pinia報(bào)錯(cuò)的簡(jiǎn)單解決辦法,什么是pinia,可以理解為狀態(tài)管理工具,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
在Vue中實(shí)現(xiàn)深度監(jiān)聽的示例代碼
在 Vue 中,深度監(jiān)聽是指監(jiān)聽一個(gè)對(duì)象或數(shù)組的嵌套屬性(深層結(jié)構(gòu))的變化,而不僅僅是監(jiān)聽頂層屬性的引用變化,本文給大家介紹了如何在Vue中實(shí)現(xiàn)深度監(jiān)聽,并通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
Vue.js框架實(shí)現(xiàn)購(gòu)物車功能
這篇文章主要為大家詳細(xì)介紹了Vue.js框架實(shí)現(xiàn)購(gòu)物車功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06
Vue 3中常用的生命周期鉤子和監(jiān)聽器的操作方法
這篇文章主要介紹了Vue 3中常用的生命周期鉤子和監(jiān)聽器的操作方法,分析常用的一些生命周期鉤子和監(jiān)聽器可以幫助我們?cè)诮M件中處理數(shù)據(jù)加載、狀態(tài)變化和響應(yīng)式更新,需要的朋友可以參考下2024-07-07
vue如何實(shí)現(xiàn)本項(xiàng)目頁面之間跳轉(zhuǎn)
這篇文章主要介紹了vue如何實(shí)現(xiàn)本項(xiàng)目頁面之間跳轉(zhuǎn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

