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)文章
詳解mpvue scroll-view自動回彈bug解決方案
設(shè)置了scroll-top的scroll-view組件,在組件所在vue實例data發(fā)生改變時會自動回彈到最上方,非常具有實用價值,需要的朋友可以參考下2018-10-10
一次在vue中使用post進行excel表下載的實戰(zhàn)記錄
最近遇到了需求,覺著有必要給大家總結(jié)下,這篇文章主要給大家介紹了關(guān)于一次在vue中使用post進行excel表下載的實戰(zhàn)記錄,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07
關(guān)于el-col的使用,占據(jù)寬度的應(yīng)用解析
這篇文章主要介紹了關(guān)于el-col的使用,占據(jù)寬度的應(yīng)用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05
vue.js中proxyTable 轉(zhuǎn)發(fā)請求的實現(xiàn)方法
今天小編就為大家分享一篇vue.js中proxyTable 轉(zhuǎn)發(fā)請求的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-09-09
詳解vue.js 開發(fā)環(huán)境搭建最簡單攻略
本篇文章主要介紹了vue.js 開發(fā)環(huán)境搭建最簡單攻略,這里整理了詳細的步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06

