webpack正式、測試環境接口地址本地運行及打包命令配置


聲明:本文由w3h5原創,轉載請注明出處:《webpack正式、測試環境接口地址本地運行及打包命令配置》 https://www.w3h5.com/post/521.html

為了方便開發,節省接口地址修改維護時間,可以通過 webpack 配置,區分正式、測試環境。

webpack.png webpack正式、測試環境接口地址本地運行及打包命令配置 經驗總結

可以方便的通過一個命令或者參數,運行或者連接不同環境的接口地址:

# 本地運行測試環境 npm run dev # 本地運行正式環境  npm run prod # 測試環境打包 npm run build # 正式環境打包 npm run build prod

先了解幾個概念:

process.argv :

process 對象是一個全局變量,它提供當前 Node.js 進程的有關信息,以及控制當前 Node.js 進程。 因為是全局變量,所以無需使用 require()

process.argv 屬性返回一個數組,這個數組包含了啟動 Node.js 進程時的命令行參數。

其中:

數組的第一個元素 process.argv[0] 返回啟動 Node.js 進程的可執行文件所在的絕對路徑。

第二個元素 process.argv[1] 為當前執行的 JavaScript 文件路徑。

剩余的元素為其他命令行參數。

例如運行:

node process-args.js one two=three four

此時:

process.argv = ['/usr/local/bin/node', '<path>process-args.js', 'one', 'two=three', 'four']

webpack 也同樣支持 argv 參數,在 package.json 中配置命令:

"scripts": {     "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",     "prod": "webpack-dev-server --inline --progress --env=prod --config build/webpack.dev.conf.js",   },

我們就可以從 process.argv[4] 拿到 "--env=prod" 這個參數。

打印出來的效果如下:

# process.argv [ '/usr/local/bin/node',   '/www/w3h5/node_modules/.bin/webpack',   '--inline',   '--progress',   '--env=prod',   '--config' ]

配置方法:

首先修改 webpack 的配置文件, /config/dev.env.js

'use strict' const merge = require('webpack-merge') const prodEnv = require('./prod.env') let params = process.argv[4] let baseUrl = '' switch (params) {   case '--env=prod': //正式環境地址     baseUrl = '"https://api.w3h5.com/"',//首頁地址     break   default: //測試環境地址     baseUrl = '"http://api-test.w3h5.com/"',//首頁地址 } module.exports = merge(prodEnv, {//process.env.HOME_URL   NODE_ENV: '"development"',   HOME_URL: baseUrl,//首頁地址 })

先聲明一個變量 params ,然后將 --env=prod (代表正式環境)賦值給它。

使用 switch case 語句進行判斷,如果有這個代表正式環境的參數,則使用正式環境的地址。如果沒有這個參數,則默認走測試環境。

然后將 HOME_URL 變量用 module.exports 導出。

這樣就可以通過 npm 命令來區分運行正式還是測試環境了。

# 測試環境 npm run dev # 正式環境 npm run prod

打包命令配置:

和上面一樣,修改  /config/prod.evn.js 文件:

'use strict' let params = process.argv[2] let baseUrl = '' switch (params) {   case 'prod': //正式環境地址     baseUrl = '"https://api.w3h5.com/"',//首頁地址     break   default: //測試環境地址     baseUrl = '"http://api-test.w3h5.com/"',//首頁地址 } module.exports = merge(prodEnv, {//process.env.HOME_URL   NODE_ENV: '"production"',   HOME_URL: baseUrl,//首頁地址 })

細心的朋友可能會注意到,這里給 params 賦得值是 process.argv[2] ,可以看一下 package.json 中配置的命令:

"scripts": {   "build": "node build/build.js" },

因為 build 命令只有兩個參數,執行下面的命令,就可以將第三個參數 prod 帶過去:

# 測試環境打包 npm run build  # 正式環境打包 npm run build prod

前端直接調用

項目運行后,前端就可以直接用 process.env.HOME_URL 獲取到首頁的地址了。

測試環境會顯示:http://api-test.w3h5.com/

正式環境就是:https://api.w3h5.com/

什么是 process.env :

通常情況下,我們需要針對不同環境(開發環境、集成環境、生產環境等),進行相應策略的打包(比如是否替換接口地址,代碼是否壓縮等)。webpack 就是通過 process.env 屬性加以區分。

webpack 是 npm 生態中的一個模塊,webpack 運行依賴於 node 環境。這里的 process.env 是Nodejs提供的一個API,它返回一個包含用戶環境信息的對象。

如果我們給 Nodejs 設置一個環境變量,並把它掛載在 process.env 返回的對象上,便可以在代碼中進行相應的環境判斷。

process.env 屬性返回一個對象,包含了當前 Shell 的所有環境變量。比如,process.env.HOME 返回用戶的主目錄。

通常的做法是,新建一個環境變量 NODE_ENV ,用它確定當前所處的開發階段,生產階段設為 production ,開發階段設為 development 或 testing ,然后在腳本中讀取 process.env.NODE_ENV 即可。

要說明的是,NODE_ENV 這個名稱只是開發社區的一種共識,名稱內容是可以修改的。如果需要,你也可以把它定義為 NODE_abc 或者 xxx 都行。

 

參考文獻:

http://nodejs.cn/api/process.html#process_process_argv

https://www.jianshu.com/p/19d199f93045


免責聲明!

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



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