亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue單頁面應(yīng)用做預(yù)渲染的方法實(shí)例

 更新時(shí)間:2021年10月26日 09:06:21   作者:_Battle  
vue是一個(gè)單頁面的應(yīng)用,這導(dǎo)致一些爬蟲和百度無法搜索到,如果你想針對(duì)你應(yīng)用的其中某些頁面進(jìn)行SEO優(yōu)化,讓他們可以被爬蟲和百度搜索到,你可以進(jìn)行預(yù)渲染操作,下面這篇文章主要給大家介紹了關(guān)于Vue單頁面應(yīng)用做預(yù)渲染的相關(guān)資料,需要的朋友可以參考下

前言

使用vue-cli打包項(xiàng)目一般為spa項(xiàng)目,眾所周知單頁面應(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'),
      
      // 對(duì)應(yīng)自己的路由文件,比如index有參數(shù),就需要寫成 /index/param1。
      routes: ['/', '/report','/genius','/index/param1'],
      // 一定要寫,如果沒有配置這段,也不會(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'
      })
    })
]

在main.js中添加

new Vue({
  el: '#pingce',
  router,
  store,
  components: { App },
  template: '<App/>',
  // 添加mounted,不然不會(huì)執(zhí)行預(yù)編譯
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

router.js中設(shè)置mode: "history"

運(yùn)行npm run build,看一下生成的 dist 的目錄里是不是有每個(gè)路由名稱對(duì)應(yīng)的文件夾。然后找個(gè) 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容。

每一個(gè)你所配置得路由都會(huì)生成一個(gè)文件夾,然后每個(gè)文件夾下邊都會(huì)生成一個(gè)index.html

vue-cli3.0版本

3.0的cli看上去簡(jiǎn)潔多了,去掉了2.0 build和config等目錄,那我們?cè)趺慈バ薷膚ebpack的配置呢?

在根目錄下創(chuàng)建vue.config.js,進(jìn)行你的配置。

安裝

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打包的一致。
                    // 這個(gè)目錄只能有一級(jí),如果目錄層次大于一級(jí),在生成的時(shí)候不會(huì)有任何錯(cuò)誤提示,在預(yù)渲染的時(shí)候只會(huì)卡著不動(dòng)。
                    staticDir: path.join(__dirname,'dist'),
                    // 對(duì)應(yīng)自己的路由文件,比如about有參數(shù),就需要寫成 /about/param1。
                    routes: ['/', '/product','/about'],
                    // 必須配置不然不會(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'
                    })
                }),
            ],
        };
    }
}

在main.js中添加

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

router.js 中設(shè)置mode: “history”

運(yùn)行npm run build,看一下生成的 dist 的目錄里是不是有每個(gè)路由名稱對(duì)應(yīng)的文件夾。

總結(jié)

1.路由的模式最好使用history模式,不使用也可以運(yùn)行生成文件,但是查看每個(gè)index.html文件內(nèi)容師一樣的。

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

在2.0中,設(shè)置  staticDir: path.join(__dirname,'../dist')

在3.0中,設(shè)置  staticDir: path.join(__dirname,'dist')

如果這兩個(gè)設(shè)置錯(cuò)了,運(yùn)行npm run build 都會(huì)報(bào)錯(cuò)。

如果你想設(shè)置每個(gè)頁面的 title 和 meta 信息推薦使用 [vue-meta-info]

到此這篇關(guān)于Vue單頁面應(yīng)用做預(yù)渲染的文章就介紹到這了,更多相關(guān)Vue單頁面應(yīng)用預(yù)渲染內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡(jiǎn)單聊一聊axios配置請(qǐng)求頭content-type

    簡(jiǎn)單聊一聊axios配置請(qǐng)求頭content-type

    最近在工作中碰到一個(gè)問題,后端提供的get請(qǐng)求的接口需要在request header設(shè)置,下面這篇文章主要給大家介紹了關(guān)于axios配置請(qǐng)求頭content-type的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 解決vue打包c(diǎn)ss文件中背景圖片的路徑問題

    解決vue打包c(diǎn)ss文件中背景圖片的路徑問題

    今天小編就為大家分享一篇解決vue打包c(diǎn)ss文件中背景圖片的路徑問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue 數(shù)組和對(duì)象更新,但是頁面沒有刷新的解決方式

    Vue 數(shù)組和對(duì)象更新,但是頁面沒有刷新的解決方式

    今天小編就為大家分享一篇Vue 數(shù)組和對(duì)象更新,但是頁面沒有刷新的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue實(shí)現(xiàn)步驟條效果

    Vue實(shí)現(xiàn)步驟條效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)步驟條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 關(guān)于Vue 消除Token過期時(shí)刷新頁面的重復(fù)提示問題

    關(guān)于Vue 消除Token過期時(shí)刷新頁面的重復(fù)提示問題

    很多朋友在token過期時(shí)刷新頁面,頁面長(zhǎng)時(shí)間未操作,再刷新頁面時(shí),第一次彈出“token失效,請(qǐng)重新登錄!”提示,針對(duì)這個(gè)問題該怎么處理呢,下面小編給大家?guī)碓蚍治黾敖鉀Q方法,一起看看吧
    2021-07-07
  • Vue實(shí)現(xiàn)拖放排序功能的實(shí)例代碼

    Vue實(shí)現(xiàn)拖放排序功能的實(shí)例代碼

    本文通過實(shí)例代碼給大家介紹了Vue中實(shí)現(xiàn)拖放排序功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解vue父子組件狀態(tài)同步的最佳方式

    詳解vue父子組件狀態(tài)同步的最佳方式

    這篇文章主要介紹了vue父子組件狀態(tài)同步的最佳方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 利用vue.js把靜態(tài)json綁定bootstrap的table方法

    利用vue.js把靜態(tài)json綁定bootstrap的table方法

    今天小編就為大家分享一篇利用vue.js把靜態(tài)json綁定bootstrap的table方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • elementui?el-select?change事件傳參問題

    elementui?el-select?change事件傳參問題

    這篇文章主要介紹了elementui?el-select?change事件傳參問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 深入理解Vue官方文檔梳理之全局API

    深入理解Vue官方文檔梳理之全局API

    本篇文章主要介紹了深入理解Vue官方文檔梳理之全局API,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11

最新評(píng)論