關於切換環境變量的問題( 以vue-cli3.0 為例)


  在 項目的開發中我們一般需要區分多種環境,有時候不一定只有開發環境,生產環境,測試環境,還有可能會區分更多的環境,那么區分這些環境的話,我們的配置有多中方式;

  方式一:直接只用  .env.development 和 .env.production 來進行環境的區分,每次發版的時候修改環境變量的值來加以領用;

  方式二:通過服務器的訪問域名來區分,一般項目的域名都是不變的,捕捉到當前環境的域名,然后將變量處理一下就可以了;

  方式三: 通過 npm run dev 的命令來區分,我們可以創建多個  .env.modeName 的文件,通過在 package.json 中添加相應的命令,然后添加 --mode=modeName 來進行文件的切換,但是需要注意的是,設置 modeName 的時候,只有在相應的三個模式下才可以,例如:

      "serve": "vue-cli-service serve --mode=work", 是可行的;
         "dev": "npm run serve --mode=work",  是不可行的;
  環境、指令、環境變量之間的關系如下:
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 自帶的依賴模塊 

child_process;結合 shelljs ;通過 child_process 來獲取,當前是在哪個分支,然后利用 shelljs 去執行相應的 npm 命令;
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`)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM