在 項目的開發中我們一般需要區分多種環境,有時候不一定只有開發環境,生產環境,測試環境,還有可能會區分更多的環境,那么區分這些環境的話,我們的配置有多中方式;
方式一:直接只用 .env.development 和 .env.production 來進行環境的區分,每次發版的時候修改環境變量的值來加以領用;
方式二:通過服務器的訪問域名來區分,一般項目的域名都是不變的,捕捉到當前環境的域名,然后將變量處理一下就可以了;
方式三: 通過 npm run dev 的命令來區分,我們可以創建多個 .env.modeName 的文件,通過在 package.json 中添加相應的命令,然后添加 --mode=modeName 來進行文件的切換,但是需要注意的是,設置 modeName 的時候,只有在相應的三個模式下才可以,例如:
vue-cli-service serve 用法:vue-cli-service serve [options] [entry] 選項: --open 在服務器啟動時打開瀏覽器 --copy 在服務器啟動時將 URL 復制到剪切版 --mode 指定環境模式 (默認值:development) --host 指定 host (默認值:0.0.0.0) --port 指定 port (默認值:8080) --https 使用 https (默認值:false) vue-cli-service build 用法:vue-cli-service build [options] [entry|pattern] 選項: --mode 指定環境模式 (默認值:production) --dest 指定輸出目錄 (默認值:dist) --modern 面向現代瀏覽器帶自動回退地構建應用 --target app | lib | wc | wc-async (默認值:app) --name 庫或 Web Components 模式下的名字 (默認值:package.json 中的 "name" 字段或入口文件名) --no-clean 在構建項目之前不清除目標目錄 --report 生成 report.html 以幫助分析包內容 --report-json 生成 report.json 以幫助分析包內容 --watch 監聽文件變化
對於大多數的項目開發者都不願意每次發一次版本就切換一次環境,所以用指令來區分環境,進而加載不同的 .env.modeName 是更加的省事也更加的方便的,那么問題就來了:對於本地開發的的時候我們能很快的就輸入命令,進行命令的切換進而也執行不同的環境,那么對於維護的成員來說,怎么辦呢?
其實,對於大多數的公司來說,運維都是通過 jenkins 來進行發版的,通過 jenkins 的話,可以直接指定我們要發版的分支,而且他們可以配置系統參數,然后我們通過 process.env.VUECONFIG 來獲取到是哪個環境的,再去加載哪個配置就可以了,進行環境變量的配置,對於 vue-cli2.0 的配置,其實就是 merge congfig 文件下的哪個 js 文件的問題,對於 vue-cli3.0 的話,如果我們知道了,process.env.VUECONFIG 之后,我們可以在 vue.config.js 中在 module.export 的 cinfigureWbepack: config => {} 中,通過 process.env.VUECONFIG 判斷是什么環境,從而再去配置相應的值;
我們的腳手架一般都是基於 node.js 的一個服務,其實我們也可以通過另外一種方式來確定是什么環境的,這個需要我們確定好相應的發版分支,利用 node.js 自帶的依賴模塊
const shelljs = require('shelljs') const childProcess = require('child_process') // console.log(childProcess) // console.log(childProcess.execSync) const branch = childProcess.execSync('git rev-parse --abbrev-ref HEAD').toString().replace(/\s+/, '') console.log('npm-build.js run branch: ', branch) // shelljs.exec(`npm run serve`)