Webpack配置環(huán)境變量 - 避免踩坑

前言

今天來(lái)講一下Webpack配置環(huán)境變量,那么環(huán)境變量是干啥的港华。我們?cè)陂_(kāi)發(fā)項(xiàng)目中都會(huì)遇到這種場(chǎng)景道川,區(qū)分開(kāi)發(fā)環(huán)境生產(chǎn)環(huán)境立宜、測(cè)試環(huán)境冒萄,不同場(chǎng)景請(qǐng)求不同的接口Api。這時(shí)候項(xiàng)目中配置的環(huán)境變量就登場(chǎng)啦~橙数,下面來(lái)講一下配置環(huán)境變量的方式吧尊流。

配置方法

Set or Export

該方式有個(gè)棘手的問(wèn)題就是windowsmac使用的方式還不同,不同系統(tǒng)使用啟動(dòng)項(xiàng)目還得更改代碼灯帮,這就有點(diǎn)難受崖技,我們來(lái)看一下。

package.json

windows系統(tǒng)如下配置

{
  "scripts": {
    "dev": "set NODE_ENV=dev && node index.js"
  }
}

mac系統(tǒng)如下配置

{
  "scripts": {
    "dev": "export NODE_ENV=dev && node index.js"
  }
}

效果

webpack.config.js文件

console.log(process.env.NODE_ENV) // dev

該配置方式如果用windows方式配置钟哥,用mac電腦啟動(dòng)這樣就會(huì)有問(wèn)題响疚,我們還得手動(dòng)更改,這樣非常的繁瑣瞪醋。

Cross-env

該插件就是解決上面我們所說(shuō)的問(wèn)題(不同系統(tǒng)使用不同的配置方式)忿晕,該插件稱為 "跨平臺(tái)環(huán)境變量",就是一套代碼兼容兩端银受。下面我們來(lái)案例

安裝

npm i cross-env -D

在項(xiàng)目下package.json中配置

{
  "scripts": {
    "dev:serve": "set NODE_ENV=baidu.com && npx webpack-dev-server --config=./config/webpack.config.js",
  }
}

webpack.config.js

console.log(process.env.NODE_ENV) // baidu.com

但是上面這樣還有個(gè)問(wèn)題是践盼,雖然我們環(huán)境變量配置好了,但是只能在webpack.config.js里面使用宾巍。我們來(lái)到main.js文件下打印看看呢咕幻。

main.js

console.log(process.env.NODE_ENV) // undefined

上面main.js可以清楚的看到,打印結(jié)果為undefined顶霞,這是為什么呢肄程,是因?yàn)?strong>當(dāng)前的環(huán)境變量锣吼,只是在node環(huán)境中生效,在瀏覽器中并沒(méi)有蓝厌,所以main.js里面獲取到的是undefined玄叠。

有坑 - 誤區(qū)

webpack.config.js

console.log(process.env.NODE_ENV) // baidu.com
module.exports = {
    mode: "development"
}

main.js

console.log(process.env.NODE_ENV) // development

咦,這次怎么main.js里面環(huán)境變量又變成development了拓提,這是因?yàn)闉g覽器環(huán)境中NODE_ENV走的是webpack里的mode读恃。

  • webpack-dev-server 默認(rèn)就是 --mode=development
  • webpack 默認(rèn)就是 --mode=production

注意這里的坑,避免出錯(cuò)代态。

回歸主題寺惫,那么既然cross-env環(huán)境變量只能在node環(huán)境下使用,那怎么在瀏覽器環(huán)境下使用呢蹦疑。配合Webpack提供的內(nèi)置插件全局變量西雀,我們來(lái)配置一下。

webpack.config.js

console.log(process.env.NODE_ENV) // baidu.com
const webpack = require("webpack")
module.exports = {
    mode: "development",
    plugins: [
        new webpack.DefinePlugin({
            "process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV)
        })
    ]
}

main.js

console.log(process.env.NODE_ENV) // baidu.com

這時(shí)再看歉摧,cross-env全局變量已經(jīng)覆蓋掉mode的啦艇肴,上面JSON.stringify是防止解析成為一個(gè)變量。現(xiàn)在可以在全局項(xiàng)目中隨意使用環(huán)境變量啦~判莉。

我是蛙人豆挽,我們下篇見(jiàn)。

公眾號(hào):前端娛樂(lè)圈

感謝

謝謝你讀完本篇文章券盅,希望對(duì)你能有所幫助帮哈,如有問(wèn)題歡迎各位指正。

我是蛙人(????)锰镀,如果覺(jué)得寫(xiě)得可以的話娘侍,請(qǐng)點(diǎn)個(gè)贊吧?。

感興趣的小伙伴可以加入 [ 前端娛樂(lè)圈交流群 ] 歡迎大家一起來(lái)交流討論

寫(xiě)作不易泳炉,「點(diǎn)贊」+「在看」+「轉(zhuǎn)發(fā)」 謝謝支持?

往期好文

《聊聊在Vue項(xiàng)目中使用Decorator裝飾器》

《分享15個(gè)Webpack實(shí)用的插件:斗ぁ!花鹅!》

《手把手教你寫(xiě)一個(gè)Vue組件發(fā)布到npm且可外鏈引入使用》

《分享12個(gè)Webpack中常用的Loader》

《聊聊什么是CommonJs和Es Module及它們的區(qū)別》

《這些工作中用到的JavaScript小技巧你都知道嗎氧腰?》

《【建議收藏】分享一些工作中常用的Git命令及特殊問(wèn)題場(chǎng)景怎么解決》

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市刨肃,隨后出現(xiàn)的幾起案子古拴,更是在濱河造成了極大的恐慌,老刑警劉巖真友,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄痪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盔然,警方通過(guò)查閱死者的電腦和手機(jī)桅打,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)是嗜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人挺尾,你說(shuō)我怎么就攤上這事鹅搪。” “怎么了潦嘶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵涩嚣,是天一觀的道長(zhǎng)崇众。 經(jīng)常有香客問(wèn)我掂僵,道長(zhǎng),這世上最難降的妖魔是什么顷歌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任锰蓬,我火速辦了婚禮,結(jié)果婚禮上眯漩,老公的妹妹穿的比我還像新娘芹扭。我一直安慰自己,他們只是感情好赦抖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布舱卡。 她就那樣靜靜地躺著,像睡著了一般队萤。 火紅的嫁衣襯著肌膚如雪轮锥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天要尔,我揣著相機(jī)與錄音舍杜,去河邊找鬼。 笑死赵辕,一個(gè)胖子當(dāng)著我的面吹牛既绩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播还惠,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饲握,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蚕键?” 一聲冷哼從身側(cè)響起救欧,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嚎幸,沒(méi)想到半個(gè)月后颜矿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嫉晶,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年骑疆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了田篇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡箍铭,死狀恐怖泊柬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诈火,我是刑警寧澤兽赁,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站冷守,受9級(jí)特大地震影響刀崖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拍摇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一亮钦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧充活,春花似錦蜂莉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至幕随,卻和暖如春蚁滋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背合陵。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工枢赔, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拥知。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓踏拜,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親低剔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子速梗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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