最近系統(tǒng)接入了公司的單點登錄写隶,為了登陸成功后再跳回系統(tǒng)的主頁面铜跑,又申請了測試和沙箱的域名(之前都是直接用IP登的),本地開發(fā)是配置的host坐梯。接入之后發(fā)現(xiàn)了一個非常麻煩的點就是給單點登錄傳的跳轉(zhuǎn)地址每次都要修改震嫉,開發(fā)的時候要寫成開發(fā)的域名森瘪,測試的時候要改成測試的域名,進(jìn)沙箱的時候要改成跳轉(zhuǎn)沙箱的域名责掏,上線的時候又要改成線上的域名。特別是在測試階段湃望,開發(fā)測試來回切換换衬,不勝其煩。
于是就想把它寫成配置文件证芭,根據(jù)不同環(huán)境加載不同的配置瞳浦,這樣就不用來回改了。這個時候废士,process.env就跳入了腦海叫潦,叫囂著,終于該我出場啦9傧酢矗蕊!
扒一扒process.env
process對象是全局變量,它提供當(dāng)前node.js的有關(guān)信息氢架,以及控制當(dāng)前node.js的有關(guān)進(jìn)程傻咖。因為是全局變量,它對于node應(yīng)用程序是始終可用的岖研,無需require()卿操。
既然process都是一個對象了,env自然是它的一個屬性,這個屬性返回包含用戶環(huán)境信息的對象害淤。在終端輸入node后扇雕,在輸入process.env可以看到打印出來的信息。
主角出場 process.env.NODE_ENV
NODE_ENV不是process.env對象上原有的屬性窥摄,它是我們自己添加上去的一個環(huán)境變量镶奉,用來確定當(dāng)前所處的開發(fā)階段。一般生產(chǎn)階段設(shè)為production溪王,開發(fā)階段設(shè)為develop腮鞍,然后在腳本中讀取process.env.NODE_ENV。
運(yùn)行腳本時莹菱,可以這樣改變環(huán)境變量, 在package.json文件的scripts里面添加命令:
NODE_ENV=production node build.js
但是這個命令使用Windows的同學(xué)拉下代碼后就報錯了移国,因為Windows上面設(shè)置的方式不一樣:
set NODE_ENV=production node build.js
但是不同電腦上不同的設(shè)置肯定是不行的呀,這個時候cross-env趕來救場了道伟。
cross-env可以跨平臺的設(shè)置和使用環(huán)境變量
安裝:
npm install --save-dev cross-env
接下來我們就可以通過cross-env來設(shè)置了
cross-env NODE_ENV=production node build.js
這樣設(shè)置之后迹缀,我們可以在腳本中使用process.env.NODE_ENV了,但是不能在模塊中使用蜜徽,要想在模塊當(dāng)中直接使用祝懂,我們還需要一些配置
DefinePlugin
DefinePlugin可以定義一些全局變量,讓我們在模塊當(dāng)中直接使用拘鞋,不用做任何聲明砚蓬。
const webpack = require('webpack');
module.exports = {
entry: {
app: './src/app'
},
output: {
path: 'dist',
filename: 'bundle.js'
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': 'production'
})
]
};
當(dāng)我們直接這樣定義的時候,編譯后是這個樣子的
DefinePlugin直接將內(nèi)容替換了盆色,而不是一個字符串灰蛙,所以我們經(jīng)常這樣定義:
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
})
這樣就可以直接使用啦_
現(xiàn)在我們要在模塊中根據(jù)環(huán)境變量來配置不同的url了
let url = '';
if (process.env.NODE_ENV === 'testing') {
url = 'http://my.test.cn';
} else if (process.env.alpord === 'alpord') {
url = 'http://my.alpord.cn';
} else if (process.env.NODE_ENV === 'production') {
url = 'http://my.product.cn';
} else {
url = 'http://my.develop.cn';
}
這只是簡單列了一下process.env.NODE_ENV的用法,大家知道怎么用就好啦