1. 程式人生 > 程式設計 >Vue單頁面應用做預渲染的方法例項

Vue單頁面應用做預渲染的方法例項

目錄
  • 前言
  • -cli2.0版本
  • vue-cli3.0版本
  • 總結

前言

使用vue-cli打包專案一般為spa專案,眾所周知單頁面應用不利於SEO,有ssr(服務端渲染)和預渲染兩種解決方案,這裡我們只討論預渲染

vue-cli2.0版本

安裝

npm install prerender-spa-plugin --save

webpack.prod.conf.增加部分程式碼

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')    // 引入外掛
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

plugins:[
	// 配置PrerenderSPAPlugin
    new PrerenderSPAPlugin({
      // 生成檔案的路徑,也可以與webpakc打包的一致。
      staticDir: path.join(__dirname,'../dist'),// 對應自己的路由檔案,比如index有引數,就需要寫成 /index/param1。
      routes: ['/','/report','/genius','/index/param1'],// 一定要寫,如果沒有配置這段,也不會進行預編譯
      renderer: new Renderer({
          inject: {
       www.cppcns.com
foo: 'bar' },headless: false,// 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應上。 renderAfterDocumentEvent: 'render-event' }) }) ]

在main.js中新增

new Vue({
  el: '#pingce',
  router,store,components: { App },template: '<App/>',// 新增mounted,不然不會執行預編譯
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

router.js中設定mode: "history"

執行npm run build,看一下生成的 dist 的目錄裡是不是有每個路由名稱對應的資料夾。然後找個 目錄裡 的 index.html 用IDE開啟,看檔案內容裡是否有該檔案應該有的內容。

每一個你所配置得路由都會生成一個資料夾,然後每個資料夾下邊都會生成一個index.html

Vue單頁面應用做預渲染的方法例項

vue-cli3.0版本

3.0的cli看上去簡潔多了,去掉了2.0 build和config等目錄,那我們怎麼去修改webpack的配置呢?

在根目錄下建立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打包的一致。
                    // 這個目錄只能有一級,如果目錄層次大於一級,在生成的時候不會有任何錯誤提示,在預渲染的時候只會卡著不動。
                    staticDir: pawww.cppcns.comth.join(__dirname,'dist'),// 對應自己的路由檔案,比如about有引數,就需要寫成 /about/param1。
                    routes: ['/','/product','/about'],// 必須配置不然不會進行預編譯
                    renderer: new Renderer({
                        inject: {
                            foo: 'bar'
                        },// 在 main.js 中 document.dispatchEvent(new Event('render-event')),兩者的事件名稱要對應上。
                        renderAfterDocumentEvent: 'render-event'
                    })
                }),],};
    }
}

在main.js中新增

new Vue({
  router,render: h => h(App),// 與 vue-config.js的renderAfterDocumentEvent: 'render-event'名字一定要對應上
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
}).$mount('#app')

router.js 中設定mode: “history”

執行npm run build,看一下生成的 dist 的目錄裡是不是有每個路由名稱對應的資料夾。

總結

1.路由的模式最好使用history模式,不使用也可以執行生成檔案,但是檢視每個index.html檔案內容師一樣的。

2.在3.0中和2.0中的設定大致是一樣的但是極個別的地方一定有注意

在2.0中,設定 staticDir: path.join(__dirname,'..www.cppcns.com/dist')

在3.0中,設定 staticDir: path.join(__dirname,'dist')

如果這兩個設定錯了,執行npm run build 都會報錯。

如果你想設定每個頁面的 title 和 meta 資訊推薦使用 [vue-meta-info]

到此這篇關於Vue單頁面應用做預渲染的文章就介紹到這了,更多相關Vue單頁面應用預渲染內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!