vue 2分環(huán)境打包以及優(yōu)化

在項(xiàng)目開(kāi)發(fā)中,我們往往需要區(qū)分開(kāi)發(fā)版、測(cè)試版、pre版、prod版,如果每次打包前都要去修改API地址就太麻煩了,那么如何根據(jù)不同的環(huán)境打包呢?


1、安裝cross-env

?npm i --save-dev cross-env

2、修改各環(huán)境下的參數(shù)

1)在config文件夾下新建pre.env.js和test.env.js文件

2)修改prod.env.js文件的內(nèi)容

'use strict'

module.exports = {? ?

? ? ?NODE_ENV: '"prod"',? ??

? ? BASE_URL: '"http://www.aaa.com/prod"'? ?//?這里寫(xiě)生產(chǎn)環(huán)境地址?

?}? ?

3)修改pre.env.js文件的內(nèi)容

'use strict'

module.exports = {? ??

? ?NODE_ENV: '"pre"',? ? ?

? BASE_URL: '"http://www.aaa.com/pre"'? ?//?這里寫(xiě)預(yù)上線(xiàn)環(huán)境地址?

?}? ?

4)修改test.env.js文件內(nèi)容

'use strict'

module.exports = {? ? ?

? ? NODE_ENV: '"test"',? ? ??

? ? BASE_URL: '"http://www.aaa.com/test"'? ?//?這里寫(xiě)測(cè)試環(huán)境地址??

}??

5)修改dev.env.js文件內(nèi)容,讓其去合并測(cè)試環(huán)境的url

'use strict'

const merge = require('webpack-merge')

const prodEnv = require('./test.env')? ? //?將此處的./prod.env修改為./test.env?

// 合并測(cè)試上的,不用寫(xiě)東西

module.exports = merge(prodEnv, {

? ? ?NODE_ENV: '"development"'

})

6)修改webpack.prod.conf.js文件

? ?將const env = require('../config/prod.env')改為如下:

const nodeEnv = process.env.NODE_ENV

const env = require(`../config/${nodeEnv}.env`)

7)修改build.js文件

? ? 將process.env.NODE_ENV = 'production'改為如下:

const nodeEnv = process.env.NODE_ENV

? ? 將const spinner = ora(‘production’)改為:

let text = ''

switch (nodeEnv) {

case 'prod' :

? text = {

? ? color: 'green',

? ? text: '正在為生產(chǎn)環(huán)境打包.......'

? }

break;

case 'pre' :

? text = {

? ? color: 'blue',

? ? text: '正在為預(yù)上線(xiàn)環(huán)境打包.......'

? }

break;

case 'test' :

? text = {

? ? color: 'red',

? ? text: '正在為測(cè)試環(huán)境打包.......'

? }

}

const spinner = ora(text)

8)修改?package.json文件

"scripts": {

? ?"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",

? ?"start": "npm run dev", "lint": "eslint --ext .js,.vue src",

? ?"build:prod": "cross-env NODE_ENV=prod node build/build.js",

? ?"build:dev": "cross-env NODE_ENV=test node build/build.js",

? ?"build:pre": "cross-env NODE_ENV=pre node build/build.js"

},

到此,執(zhí)行不同的打包命令可以了。

打包配置好之后,還需要對(duì)項(xiàng)目進(jìn)行進(jìn)一步的優(yōu)化,如使用CDN資源和gzip壓縮

1.使用CDN資源

使用CDN在index.html文件中引入(我用的是BootCDN

<link rel="stylesheet">

<script src="https://cdn.bootcss.com/vue/2.5.21/vue.min.js"></script>

<script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>

<script src="https://cdn.bootcss.com/element-ui/2.10.1/index.js"></script>

<script src="https://cdn.bootcss.com/axios/0.19.0-beta.1/axios.min.js"></script>

<script src="https://cdn.bootcss.com/vuex/3.1.1/vuex.min.js"></script>

修改build/webpack.base.conf.js文件

module.exports = {

????// CDN

????externals: {?

? ??????'vue': 'Vue',

? ???????'vue-router': 'VueRouter',?

? ??????'vuex': 'Vuex',

? ???????'element-ui':'ELEMENT',?

? ??????'axios':'axios'

? ??}

}

最后將main.js文件中的引入注釋掉,個(gè)人測(cè)試了一下,不注釋掉的話(huà),打包體積也是會(huì)縮小的,因?yàn)榇虬a(chǎn)環(huán)境時(shí),運(yùn)行的是webpack.base.conf.js這個(gè)文件中的配置,所以不會(huì)把CDN引入的那些依賴(lài)打包進(jìn)去(如果不注釋掉的話(huà),個(gè)人覺(jué)得應(yīng)該保證CDN引入的版本和npm安裝的版本號(hào)一致,以免生產(chǎn)環(huán)境中出現(xiàn)問(wèn)題不好排錯(cuò))

2.gzip壓縮

vue-cli生成的項(xiàng)目會(huì)自動(dòng)配好相關(guān)的設(shè)置,只需我們開(kāi)啟就可以了,找到config/index.js文件

productionGzip: true, // 默認(rèn)是false,改為true

如圖:

config/index.js

打開(kāi)build/webpack.prod.conf.js文件,找到如下圖代碼,發(fā)現(xiàn)如果開(kāi)啟gzip壓縮,還需要安裝compression-webpack-plugin

build/webpack.prod.conf.js

所以我們來(lái)安裝下compression-webpack-plugin,直接安裝可能會(huì)出現(xiàn)版本沖突的報(bào)錯(cuò),建議安裝低版本的,執(zhí)行如下命令:

npm i -D compression-webpack-plugin@1.11.2

到此,前端的gzip配置就完成了,當(dāng)然還得修改服務(wù)器的配置

3. 打包之后出現(xiàn)一些map文件,不想要怎么辦?

首先介紹下map文件的作用:項(xiàng)目打包后,代碼都是經(jīng)過(guò)壓縮加密的,如果運(yùn)行時(shí)報(bào)錯(cuò),輸出的錯(cuò)誤信息無(wú)法準(zhǔn)確得知是哪里的代碼報(bào)錯(cuò)。

有了map就可以像未加密的代碼一樣,準(zhǔn)確的輸出是哪一行哪一列有錯(cuò)。

如果覺(jué)得不需要這些map文件,可以找到config/index.js,進(jìn)行如下修改(看個(gè)人項(xiàng)目需要)

productionSourceMap: false? ? // 默認(rèn)是true

github地址:Avery_G

(注:每一篇文章都會(huì)對(duì)應(yīng)有demo,已上傳到個(gè)人github)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,238評(píng)論 3 428
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,823評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,604評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,339評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,713評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評(píng)論 3 445
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,893評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,448評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,201評(píng)論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,397評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,631評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 35,033評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,321評(píng)論 1 293
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,128評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,347評(píng)論 2 377

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

  • 說(shuō)明 本文代碼中的配置基于vue-cli2 需求 在實(shí)際開(kāi)發(fā)中我們可能有測(cè)試環(huán)境一套請(qǐng)求API 和 正式環(huán)境一套A...
    chengfengwang閱讀 2,296評(píng)論 0 1
  • 最近要把Vue項(xiàng)目部署到服務(wù)器上,在測(cè)試好的項(xiàng)目中執(zhí)行npm run build就開(kāi)始打包了。但是每次只能打包到一...
    趙客縵胡纓v吳鉤霜雪明閱讀 11,270評(píng)論 1 19
  • 我們開(kāi)發(fā)項(xiàng)目的時(shí)候,用vue-cli 2.x版本新建的項(xiàng)目,只有dev, pro兩種開(kāi)發(fā)環(huán)境, 有時(shí)需要個(gè)test...
    碼路芽子閱讀 478評(píng)論 0 0
  • 一個(gè)人的一生,只有一程。前途渺渺,無(wú)為不艱辛,途中所識(shí),亦無(wú)為不齊放異彩。 這一生,嘆命運(yùn),過(guò)于短暫,嘆痛苦,卻又...
    不謝的牛閱讀 441評(píng)論 4 7
  • "吃"一定是春節(jié)的重頭戲,大年三十年夜飯,朋友圈里北方朋友一定曬的是熱氣騰騰,各式花樣的餃子,南方朋友飯桌上必定曬...
    紫桔梗閱讀 287評(píng)論 0 1