環境變量的設置
在用webpack
作爲打包工具的項目中,環境變量共有三種:
node
運行時的環境變量webpack
配置對象的環境變量js
運行時的環境變量
node
運行時的環境變量
在node
環境中,通過process.env
可以獲取node
的全局環境信息
在windows
系統中,可以通過執行以下命令設置:
set NODE_ENV=dev
在linux
系統中,可以通過執行以下命令設置:
export NODE_ENV=dev
所以,我們可以在項目的package.json
中設置:
"scripts": {
"start-win": "set NODE_ENV=dev && node app.js",
"start-unix": "export NODE_ENV=dev && node app.js",
}
但這樣肯定不是我們想要的,能不能統一一條命令?
方法是安裝cross-env
npm i -D cross-env
再在package.json
中設置
"scripts": {
"start": "cross-env NODE_ENV=dev && node app.js",
}
這時就可以在所有系統中使用同一命令了。
執行命令之後,就可以在node
代碼中獲取了
console.log(process.env.NODE_ENV) // dev
NODE_ENV
只是筆者隨意設置的環境變量名稱,你也可以隨意設置環境變量名稱
webpack
配置對象的環境變量
webpack
配置對象的環境變量是通過webpack
命令行來設置的。
從webpack4
開始,webpack
將webpack
的命令行抽離成一個單獨的npm
包:webpack-cli
,所以,如果要使用webpack
命令行傳參需要先安裝webpack-cli
。
npm i -D webpack-cli
通過webpack
命令行傳參的方式,webpack
配置對象必須通過函數的方式導出。
命令行
webpack --env.NODE_ENV=local --env.production --progress
如果設置
env
變量,卻沒有賦值,--env.production
默認將--env.production
設置爲true
*。還有其他可以使用的語法。
webpack.config.js
module.exports = env => {
// Use env.<YOUR VARIABLE> here:
console.log('NODE_ENV: ', env.NODE_ENV) // 'local'
console.log('Production: ', env.production) // true
return {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
}
}
js
運行時的環境變量
js
本身沒有環境變量一說,只是我們通過webpack
打包時傳入到js
中並設置爲js
的全局變量。
方法:
使用webpack
自帶的插件DefinePlugin
webpack.config.js
module.exports = env => {
return {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
},
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(env.NODE_ENV)
})
]
}
}
./src/index.js
console.log(process.env.NODE_ENV) // lacal