Vue單頁面應(yīng)用做預(yù)渲染的方法實例
前言
使用vue-cli打包項目一般為spa項目,眾所周知單頁面應(yīng)用不利于SEO,有ssr(服務(wù)端渲染)和預(yù)渲染兩種解決方案,這里我們只討論預(yù)渲染
vue-cli2.0版本
安裝
npm install prerender-spa-plugin --save
webpack.prod.conf.js增加部分代碼
const path = require('path') const PrerenderSPAPlugin = require('prerender-spa-plugin') // 引入插件 const Renderer = PrerenderSPAPlugin.PuppeteerRenderer plugins:[ // 配置PrerenderSPAPlugin new PrerenderSPAPlugin({ // 生成文件的路徑,也可以與webpakc打包的一致。 staticDir: path.join(__dirname, '../dist'), // 對應(yīng)自己的路由文件,比如index有參數(shù),就需要寫成 /index/param1。 routes: ['/', '/report','/genius','/index/param1'], // 一定要寫,如果沒有配置這段,也不會進行預(yù)編譯 renderer: new Renderer({ inject: { foo: 'bar' }, headless: false, // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應(yīng)上。 renderAfterDocumentEvent: 'render-event' }) }) ]
在main.js中添加
new Vue({ el: '#pingce', router, store, components: { App }, template: '<App/>', // 添加mounted,不然不會執(zhí)行預(yù)編譯 mounted () { document.dispatchEvent(new Event('render-event')) } })
router.js中設(shè)置mode: "history"
運行npm run build,看一下生成的 dist 的目錄里是不是有每個路由名稱對應(yīng)的文件夾。然后找個 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容。
每一個你所配置得路由都會生成一個文件夾,然后每個文件夾下邊都會生成一個index.html
vue-cli3.0版本
3.0的cli看上去簡潔多了,去掉了2.0 build和config等目錄,那我們怎么去修改webpack的配置呢?
在根目錄下創(chuàng)建vue.config.js,進行你的配置。
安裝
npm install prerender-spa-plugin --save
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打包的一致。 // 這個目錄只能有一級,如果目錄層次大于一級,在生成的時候不會有任何錯誤提示,在預(yù)渲染的時候只會卡著不動。 staticDir: path.join(__dirname,'dist'), // 對應(yīng)自己的路由文件,比如about有參數(shù),就需要寫成 /about/param1。 routes: ['/', '/product','/about'], // 必須配置不然不會進行預(yù)編譯 renderer: new Renderer({ inject: { foo: 'bar' }, headless: false, // 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應(yīng)上。 renderAfterDocumentEvent: 'render-event' }) }), ], }; } }
在main.js中添加
new Vue({ router, store, render: h => h(App), // 與 vue-config.js的renderAfterDocumentEvent: 'render-event'名字一定要對應(yīng)上 mounted () { document.dispatchEvent(new Event('render-event')) } }).$mount('#app')
router.js 中設(shè)置mode: “history”
運行npm run build,看一下生成的 dist 的目錄里是不是有每個路由名稱對應(yīng)的文件夾。
總結(jié)
1.路由的模式最好使用history模式,不使用也可以運行生成文件,但是查看每個index.html文件內(nèi)容師一樣的。
2.在3.0中和2.0中的設(shè)置大致是一樣的但是極個別的地方一定有注意
在2.0中,設(shè)置 staticDir: path.join(__dirname,'../dist')
在3.0中,設(shè)置 staticDir: path.join(__dirname,'dist')
如果這兩個設(shè)置錯了,運行npm run build 都會報錯。
如果你想設(shè)置每個頁面的 title 和 meta 信息推薦使用 [vue-meta-info]
到此這篇關(guān)于Vue單頁面應(yīng)用做預(yù)渲染的文章就介紹到這了,更多相關(guān)Vue單頁面應(yīng)用預(yù)渲染內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue 數(shù)組和對象更新,但是頁面沒有刷新的解決方式
今天小編就為大家分享一篇Vue 數(shù)組和對象更新,但是頁面沒有刷新的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11關(guān)于Vue 消除Token過期時刷新頁面的重復(fù)提示問題
很多朋友在token過期時刷新頁面,頁面長時間未操作,再刷新頁面時,第一次彈出“token失效,請重新登錄!”提示,針對這個問題該怎么處理呢,下面小編給大家?guī)碓蚍治黾敖鉀Q方法,一起看看吧2021-07-07利用vue.js把靜態(tài)json綁定bootstrap的table方法
今天小編就為大家分享一篇利用vue.js把靜態(tài)json綁定bootstrap的table方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08elementui?el-select?change事件傳參問題
這篇文章主要介紹了elementui?el-select?change事件傳參問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01