目前webpack(vue-cli) 打包有兩種變量,
development
,productor
, 如何添加一個test
的測試環境呢html
官方默認兩種類型
develpoment
production
,而咱們實際開發過程當中,會有本地開發,測試環境,正式環境等等,於是這兩種環境變量是不夠的,於是須要第三種乃至多種變量環境node
You can specify env variables by placing the following files in your project root:webpack
.env # loaded in all cases .env.local # loaded in all cases, ignored by git .env.[mode] # only loaded in specified mode .env.[mode].local # only loaded in specified mode, ignored by git
An env file simply contains key=value pairs of environment variables:git
FOO=bar VUE_APP_SECRET=secre
上面所述,在根目錄配置
.env
,.env.[mode]
...的文件,其次須要以VUE_APP
開頭進行變量申明web
... .env.development .env.production .env.test package.json ...
每一個文件的具體內容vue-cli
.env.developmentnpm
/* VUE_APP_CURRENTMODE 當前環境變量 */ VUE_APP_CURRENTMODE = 'development' VUE_APP_ENV = 'development環境' VUE_APP_LOGOUT_URL = 'http://l72.16.0.95/logout_development'
.env.productionjson
VUE_APP_CURRENTMODE = 'production' VUE_APP_ENV = 'production環境' VUE_APP_LOGOUT_URL = 'http://l72.16.0.95/logout_production'
.env.testsegmentfault
/* NODE_ENV 目的用於指定是一開發仍是生產形式進行操做 */ NODE_ENV = 'development' VUE_APP_CURRENTMODE = 'test' VUE_APP_ENV = 'test環境' VUE_APP_LOGOUT_URL = 'http://baidu.cn/logout_test'
package.json
... "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "lint": "vue-cli-service lint", /* --mode test 用來傳遞參數 */ "test-serve": "vue-cli-service serve --mode test" }, ...
NODE_ENV
,VUE_APP_*
...須要多注意一下
經過上面配置,VUE_APP_LOGOUT_URL
在不一樣環境變量生成不一樣的對應退出連接,
一下即是具體展現效果
yarn serve
// 開發環境
yarn test-serve
// 測試環境
yarn build
// 生產環境
如今vue-cli2的文檔被vue-cli3替代了,只能用這種最low但卻最簡單的辦法來解決問題
... webpack.base.conf.js webpack.dev.conf.js webpack.dev.conf.test.js webpack.prod.conf.js ...
build
文件夾下 新增一個須要的環境webpack.dev.conf.test.js
直接複製webpack.dev.conf.js
便可,
config
文件夾下,添加一個dev.env.test.js
webpack.dev.conf.test.js
... plugins: [ new webpack.DefinePlugin({ // 環境變量 改成本身設定的變量便可 'process.env': require('../config/dev.env.test') }) ...
dev.env.test.js 依舊複製對應 dev.env.js
'use strict' const merge = require('webpack-merge') const prodEnv = require('./prod.env') module.exports = merge(prodEnv, { NODE_ENV: '"testing"', VUE_APP_CURRENTMODE: '"testing"', VUE_APP_ENV: '"testing環境"', VUE_APP_LOGOUT_URL: '"http://l72.16.0.95/logout_testing"' })
此處注意申明的變量 都須要 '"var"'
這樣定義,否則拿不到值
最後在
package.json
中添加"test-dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.test.js",
便可
最後各類效果圖
npm run dev
npm run test-dev
npm run build
development
production
,只是在這兩種基礎上進行具體指定不一樣變量罷了,於是所謂的測試環境只是在生產環境中,另外列出一種變量,這樣用於區分生產與測試的不一樣而已
package.json
"scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "test-dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.test.js", "start": "npm run dev", "lint": "eslint --ext .js,.vue src", "build": "node build/build.js", "test": "node build/build.js --test=123 --build=12346" }
方式一
查了一些資料,對
package.json
有了更多的一些瞭解,才發現其實經過環境變量會有更加簡潔的方案。npm_lifecycle_event
修改以前的方案
prod.env.js
const env = process.env.npm_lifecycle_event === 'build' ? require('../config/prod.env') : require('../config/prod.env.test')
方式二
經過傳參模式進行判斷
process.argv
--
表示傳參,我添加=
是爲了表示傳參方便,便於識別
"test": "node build/build.js --test=123 --build=12346"
獲取參數
const PARAMS = process.argv.splice(2) function getKeyValue (params = []) { if (!Array.isArray(params)) throw new Error('請傳入數組格式參數') const obj = {} params.forEach(item => { const o = item.slice(2).split('=') obj[o[0]] = o[1] }) return obj } const r = getKeyValue(PARAMS) // { test: '123', build: '12346' }
如此即可以在require
時進行判斷,具體選擇哪個便可