如何在webpack構建的項目中添加環境的變量?
需求是這樣的,需要在項目打包之後文件的引入添加絕對的路徑,而不是相對的路徑。
比如,打包完成的文件,可能是用來測試用的,測試的地址是aaa.yourcompany.com,而正式環境的地址是bbb.yourcompany.com,這個時候我們往往是用npm run build 來構建項目。那麼,因爲webpack中沒有window環境,就不可能獲得它的host,只能夠用node的一些方式進行處理了。
有一個控件非常好用,那就是cross-env。
操作步驟如下:
1、首先安裝cross-env:
npm install --save-dev cross-env
2、在你的json文件中使用,往往是package.json文件:
"scripts": {
"dev": "cross-env NODE_ENV=development webpack-dev-server --config webpack.dev.js --mode development",
"build": "cross-env NODE_ENV=production webpack --config webpack.prod.js --mode production",
"build:ldwl": "cross-env NODE_ENV=productionldwl webpack --config webpack.prod.js --mode production"
...
}
3、process.env.NODE_ENV獲取到上一步驟的環境變量(development、production、productionldwl):
const NODE_ENV = process.env.NODE_ENV//環境變量
console.log(NODE_ENV )
4、獲取了環境變量就可以在打包的時候隨心所欲了。比如說:
npm run build:ldwl
就會構建過程中在控制檯上(日誌中)打印出了:productionldwl。然後自己去判斷輸出的絕對地址吧!
注意點: 如果環境變量沒有添加,是不能夠從日誌上看到process.env.NODE_ENV的值的,那個時候它還是undefined呢;cross-env是快速添加依賴的方式,如果想要手動添加,需要在webpack中的plugins添加一個依賴。
這樣就可以在打包的時候區分好環境,上線的文件可以直接引用絕對的上線地址了。