大多數專案都有生產環境和開發環境,一般情況下應該夠了,但是有時候還需要sit,uat,本地等環境,這時候假如要通過註釋的方式切換環境就相當麻煩了. 如果可以像下面這樣切換環境就方便了
npm run serve //預設本地開發環境
npm run serve -sit //本地開發中使用sit環境
npm run serve -uat //本地開發中使用uat環境
npm run build //預設打包後使用生產環境
npm run build -local //打包後使用本地環境
npm run build -sit //打包後使用sit環境
npm run build -uat //打包後使用uat環境
我們首先在根目錄下面建立一個vue.config.js檔案,如圖
vue.config.js程式碼如下:
const webpack = require(`webpack`)
const environment = require(`./build/environment`)
module.exports = {
baseUrl: `/wxperp/`,
configureWebpack: {
plugins: [
new webpack.DefinePlugin({
`process.env.STAGE`: JSON.stringify(environment.stage),
`process.env.LOCAL_URL`: JSON.stringify(environment.localUrl)
})
]
}
}
複製程式碼
new webpack.DefinePlugin的作用是允許你建立一個在編譯時可以配置的全域性常量
然後在根目錄建立一個build資料夾,裡面建立一個environment.js的檔案
environment.js程式碼如下:
const os = require(`os`)
// 獲取命令列變數
const configArgv = JSON.parse(process.env.npm_config_argv)
const original = configArgv.original.slice(1)
const stage = original[1] ? original[1].replace(/-/g, ``) : ``
// 本地ip地址
let localUrl
try {
const network = os.networkInterfaces()
localUrl = network[Object.keys(network)[0]][1].address
} catch (e) {
localUrl = `localhost`
}
localUrl = `http://` + localUrl + `/`
module.exports = {
stage, localUrl
}
複製程式碼
這個stage就是你輸入的變數,比如你輸入npm run serve -sit
那麼stage的值就為sit
這個localUrl就是你本地的ip,不過很多人應該用不到,我們公司比較特殊,開發的時候,介面請求的地址都是請求的自己本地伺服器,
如果不自動獲取本地ip,那麼每個同事都得在配置檔案中保留一份自己得ip地址,很麻煩,所以就自動獲取了.
接下來再src目錄下面建立一個config.js,記得在main.js中引用這個config.js
config.js程式碼如下:
(() => {
const urlMap = {
local: process.env.LOCAL_URL + `api`,
sit: `http://xxx.xxx.xxx:xxxx/sit/api`,
uat: `http://xxx.xxx.xxx:xxxx/uat/api`,
prod: `http://xxx.xxx.xxx:xxxx/prod/api`
}
//sit,uat,prod
let stage = process.env.STAGE
//development,production
const nodeEnv = process.env.NODE_ENV
//nodeEnv為production並且stage不存在預設為生產環境
if (nodeEnv === `production` && !stage) {
stage = `prod`
} else {
//stage不存在預設為本地開發環境
stage = stage || `local`
}
console.log(`ip:` + urlMap[stage])
})()
複製程式碼
我們輸入npm run serve -sit
,頁面列印如下:
再囉嗦下,process.env.NODE_ENV是@vue/cli提供的,貌似有三個值(development,production,test),
你執行npm run serve
得到的就是development
你執行npm run build
得到的就是production
你執行npm run test
得到的就是test (我沒試過)
我預設打包是打包生產環境,當然你也可以輸入引數打包其他環境