Vue-cli使用prerender-spa-plugin插件預(yù)渲染

前言:使用vue-cli打包項(xiàng)目一般為spa項(xiàng)目陷揪,眾所周知單頁面應(yīng)用不利于SEO泪姨,有ssr和預(yù)渲染兩種解決方案碰逸,這里我們只討論預(yù)渲染肠槽。此教程使用的prerender-spa-plugin版本和vue版本
"prerender-spa-plugin": "^3.4.0",
"vue": "^2.5.17",

vue-cli有2.0和3.0版本擎淤,解決方法是不一樣的,這里我們要分開討論秸仙。

vue-cli3.0版本

3.0的cli看上去簡潔多了嘴拢,去掉了2.0 build和config等目錄,那我們怎么去修改webpack的配置呢寂纪?
在根目錄下創(chuàng)建vue.config.js席吴,進(jìn)行你的配置赌结。

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打包的一致孝冒。
                    // 下面這句話非常重要<硪Α!庄涡!
                    // 這個(gè)目錄只能有一級量承,如果目錄層次大于一級,在生成的時(shí)候不會(huì)有任何錯(cuò)誤提示穴店,在預(yù)渲染的時(shí)候只會(huì)卡著不動(dòng)撕捍。
                    staticDir: path.join(__dirname,'dist'),
                    // 對應(yīng)自己的路由文件,比如a有參數(shù)泣洞,就需要寫成 /a/param1卦洽。
                    routes: ['/', '/product','/about'],
                    // 這個(gè)很重要,如果沒有配置這段斜棚,也不會(huì)進(jìn)行預(yù)編譯
                    renderer: new Renderer({
                        inject: {
                            foo: 'bar'
                        },
                        headless: false,
                        // 在 main.js 中 document.dispatchEvent(new Event('render-event'))阀蒂,兩者的事件名稱要對應(yīng)上。
                        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 中設(shè)置mode: “history”

5.運(yùn)行npm run build弟蚀,看一下生成的 dist 的目錄里是不是有每個(gè)路由名稱對應(yīng)的文件夾蚤霞。然后找個(gè) 目錄里 的 index.html 用IDE打開,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容义钉。有的話昧绣,就設(shè)置成功了,如果沒成功捶闸,照著上面的步驟再來一次R钩搿!删壮!

vue-cli2.0版本
1.安裝

 cnpm install prerender-spa-plugin --save

2.webpack.prod.conf.js增加部分代碼

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')   //引用插件
const Renderer = PrerenderSPAPlugin.PuppeteerRenderer
const webpackConfig = merge(baseWebpackConfig, {
    plugins: [
        // vue-cli生成的配置中就已有這個(gè)了贪绘,不要?jiǎng)?        new HtmlWebpackPlugin({
            filename: config.build.index,
            template: 'index.html',
            inject: true,
            minify: {
                removeComments: true,
                collapseWhitespace: true,
                removeAttributeQuotes: true
            },
            chunksSortMode: 'dependency'
        }),
        // 配置PrerenderSPAPlugin
        new PrerenderSPAPlugin({
            // 生成文件的路徑,也可以與webpakc打包的一致央碟。
            staticDir: path.join(__dirname, '../dist'),
            
            // 對應(yīng)自己的路由文件税灌,比如index有參數(shù),就需要寫成 /index/param1亿虽。
            routes: ['/', '/product','/about','/contact','/join','/jzjh'],
           
            // 這個(gè)很重要菱涤,如果沒有配置這段,也不會(huì)進(jìn)行預(yù)編譯
            renderer: new Renderer({
                inject: {
                  foo: 'bar'
                },
                headless: false,
                // 在 main.js 中 document.dispatchEvent(new Event('render-event'))洛勉,兩者的事件名稱要對應(yīng)上粘秆。
                renderAfterDocumentEvent: 'render-event'
            })
        })
    ]
})

3.在main.js中增加

new Vue({
  el: '#app',
  router,
  render: h => h(App),
  mounted () {
    document.dispatchEvent(new Event('render-event'))
  }
})

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

5.運(yùn)行npm run build,看一下生成的 dist 的目錄里是不是有每個(gè)路由名稱對應(yīng)的文件夾收毫。然后找個(gè) 目錄里 的 index.html 用IDE打開攻走,看文件內(nèi)容里是否有該文件應(yīng)該有的內(nèi)容氓涣。有的話,就設(shè)置成功了陋气,如果沒成功,照著上面的步驟再來一次R蟆9谩!

特別提醒

1.vue-cli2.0和3.0的設(shè)置大致一致淳附,但有一個(gè)很不同
在3.0中议慰,設(shè)置staticDir: path.join(__dirname,'dist'),
在2.0中,設(shè)置staticDir: path.join(__dirname,'../dist'),
如果你把3.0的staticDir設(shè)置為path.join(__dirname,'../dist')或者把2.0的staticDir設(shè)置為path.join(__dirname,'dist')奴曙,運(yùn)行npm run build 都會(huì)報(bào)錯(cuò)别凹,這要特別注意!G⒃恪炉菲!

2.細(xì)心的小伙伴會(huì)發(fā)現(xiàn),不管2.0還是3.0都需要設(shè)置 history 模式坤溃,那這一步是否是必須的呢拍霜?經(jīng)過測試,如果不設(shè)置history模式薪介,其實(shí)也能運(yùn)行和生成文件的祠饺,但查看每個(gè)index.html文件的內(nèi)容都會(huì)是一樣的。所以這一步是必須的

如果你想修改每個(gè)頁面的meta 信息汁政,這里推薦使用 vue-meta
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末道偷,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子记劈,更是在濱河造成了極大的恐慌勺鸦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件目木,死亡現(xiàn)場離奇詭異祝旷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嘶窄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門怀跛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柄冲,你說我怎么就攤上這事吻谋。” “怎么了现横?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵漓拾,是天一觀的道長阁最。 經(jīng)常有香客問我,道長骇两,這世上最難降的妖魔是什么速种? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮低千,結(jié)果婚禮上配阵,老公的妹妹穿的比我還像新娘。我一直安慰自己示血,他們只是感情好棋傍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著难审,像睡著了一般瘫拣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上告喊,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天麸拄,我揣著相機(jī)與錄音,去河邊找鬼黔姜。 笑死感帅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的地淀。 我是一名探鬼主播失球,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼帮毁!你這毒婦竟也來了实苞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤烈疚,失蹤者是張志新(化名)和其女友劉穎黔牵,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爷肝,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡猾浦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灯抛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片金赦。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖对嚼,靈堂內(nèi)的尸體忽然破棺而出夹抗,到底是詐尸還是另有隱情,我是刑警寧澤纵竖,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布漠烧,位于F島的核電站杏愤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏已脓。R本人自食惡果不足惜珊楼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望度液。 院中可真熱鬧厕宗,春花似錦、人聲如沸恨诱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽照宝。三九已至,卻和暖如春句葵,著一層夾襖步出監(jiān)牢的瞬間厕鹃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工乍丈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剂碴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓轻专,卻偏偏與公主長得像忆矛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子请垛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容