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'), // 對應自己的路由文件,比如a有參數(shù),就需要寫成 /a/param1。 routes: ['/', '/product','/about'], // 這個很重要,如果沒有配置這段,也不會進行預編譯 renderer: new Renderer({ inject: { foo: 'bar' }, headless: false, // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應上。 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 中設置mode: “history”
5.運行npm run build,看一下生成的 dist 的目錄里是不是有每個路由名稱對應的文件夾。然后找個 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應該有的內(nèi)容。有的話,就設置成功了
預渲染 prerender-spa-plugin嘗試
背景:想給項目做一些優(yōu)化,想嘗試預渲染和SSR
- 這里說一下SSR
- 使用的技術棧是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、可以手動打包完,改完路徑,講包扔給運維扔到服務器
- 方法2、使用 npm i replace-in-file 這個包寫方法 替換 路徑 這種就是純自動化部署了
2、自動化部署時
- 如果使用了上面的方法1那沒什么問題 畢竟 包是在我們這處理好的。
- 如果是方法2,自動話打包,那么jenkins在build時會有很多依賴,比如 prerender-spa-plugin 就使用了 chromium 安裝時可能會失敗這個需要注意,需要跟運維一起處理這些問題
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue 使用localstorage實現(xiàn)面包屑的操作
這篇文章主要介紹了vue 使用localstorage實現(xiàn)面包屑的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue使用Echarts實現(xiàn)數(shù)據(jù)可視化的方法詳解
這篇文章主要為大家詳細介紹了Vue使用Echarts實現(xiàn)數(shù)據(jù)可視化的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03Vue+Vite項目初建(axios+Unocss+iconify)的實現(xiàn)
一個好的項目開始搭建總是需要配置許多初始化配置,本文就來介紹一下Vue+Vite項目初建(axios+Unocss+iconify)的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下2024-02-02vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開發(fā),路由配置方式
今天小編就為大家分享一篇vue2.0 獲取從http接口中獲取數(shù)據(jù),組件開發(fā),路由配置方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11VuePress在build打包時window?document?is?not?defined問題解決
這篇文章主要為大家介紹了VuePress在build打包時window?document?is?not?defined問題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07vue3 onMounted異步函數(shù)同步請求async/await實現(xiàn)
這篇文章主要為大家介紹了vue3 onMounted初始化數(shù)據(jù)異步函數(shù)/同步請求async/await實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07element-plus一個vue3.xUI框架(element-ui的3.x 版初體驗)
這篇文章主要介紹了element-plus一個vue3.xUI框架(element-ui的3.x 版初體驗),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12