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è)很重要,如果沒(méi)有配置這段,也不會(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打開(kāi),看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容。有的話,就設(shè)置成功了
預(yù)渲染 prerender-spa-plugin嘗試
背景:想給項(xiàng)目做一些優(yōu)化,想嘗試預(yù)渲染和SSR
- 這里說(shuō)一下SSR
- 使用的技術(shù)棧是VUE
- 預(yù)渲染使用的是 prerender-spa-plugin 這個(gè)包
先說(shuō)一下效果吧
這個(gè)感覺(jué)就是類似高級(jí)的骨架屏,不過(guò)他是一個(gè)真正的頁(yè)面,只是沒(méi)有數(shù)據(jù),或者數(shù)據(jù)驅(qū)動(dòng)渲染的一切。
使用這個(gè)插件 配置好幾個(gè)預(yù)渲染的頁(yè)面會(huì) 在build時(shí)提前講這些頁(yè)面渲染成瀏覽器可以直接打開(kāi)的html文件。這樣你在瀏覽器輸入地址后,會(huì)直接得到這樣一個(gè)頁(yè)面,省去了渲染出頁(yè)面的時(shí)間,因?yàn)樵诖虬鼤r(shí)這個(gè)頁(yè)面就渲染完了,也就是我們提前預(yù)渲染了。
不好用的地方
說(shuō)一些不好用的地方,比如我們我們做的是類似管理后臺(tái)的頁(yè)面,無(wú)論你進(jìn)入什么也都需要先登陸,那么這個(gè)效果就會(huì)打折扣,畢竟無(wú)論預(yù)渲染了什么頁(yè)面 都會(huì)被重定向到登錄頁(yè)。
使用
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)你 訪問(wèn)http:// …/home 頁(yè)面時(shí) 就會(huì)直接調(diào)用這個(gè)頁(yè)面。也可以直接用瀏覽器打開(kāi)這個(gè)頁(yè)面
坑點(diǎn)
1、打開(kāi)生成的home/index.html 文件 會(huì)發(fā)現(xiàn) 有可能你的css js 引用的路徑不對(duì),導(dǎo)致你生成頁(yè)面沒(méi)有樣式,此時(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那沒(méi)什么問(wèn)題 畢竟 包是在我們這處理好的。
- 如果是方法2,自動(dòng)話打包,那么jenkins在build時(shí)會(huì)有很多依賴,比如 prerender-spa-plugin 就使用了 chromium 安裝時(shí)可能會(huì)失敗這個(gè)需要注意,需要跟運(yùn)維一起處理這些問(wèn)題
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue 使用localstorage實(shí)現(xiàn)面包屑的操作
這篇文章主要介紹了vue 使用localstorage實(shí)現(xiàn)面包屑的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11Vue使用Echarts實(shí)現(xiàn)數(shù)據(jù)可視化的方法詳解
這篇文章主要為大家詳細(xì)介紹了Vue使用Echarts實(shí)現(xiàn)數(shù)據(jù)可視化的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03Vue element-ui父組件控制子組件的表單校驗(yàn)操作
這篇文章主要介紹了Vue element-ui父組件控制子組件的表單校驗(yàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07Vue+Vite項(xiàng)目初建(axios+Unocss+iconify)的實(shí)現(xiàn)
一個(gè)好的項(xiàng)目開(kāi)始搭建總是需要配置許多初始化配置,本文就來(lái)介紹一下Vue+Vite項(xiàng)目初建(axios+Unocss+iconify)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開(kāi)發(fā),路由配置方式
今天小編就為大家分享一篇vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開(kāi)發(fā),路由配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11VuePress在build打包時(shí)window?document?is?not?defined問(wèn)題解決
這篇文章主要為大家介紹了VuePress在build打包時(shí)window?document?is?not?defined問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07vue3 onMounted異步函數(shù)同步請(qǐng)求async/await實(shí)現(xiàn)
這篇文章主要為大家介紹了vue3 onMounted初始化數(shù)據(jù)異步函數(shù)/同步請(qǐng)求async/await實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07element-plus一個(gè)vue3.xUI框架(element-ui的3.x 版初體驗(yàn))
這篇文章主要介紹了element-plus一個(gè)vue3.xUI框架(element-ui的3.x 版初體驗(yàn)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12