Nodejs後端服務配置profile

profile是什麼?

在應用開發中, 總會遇到開發/測試/預發佈/線上環境, 其環境不同, 其具體的配置項也有所不同, 不同環境的配置就可以理解爲是不同的profile.

如何快速的切換各個環境配置, 進行打包配置, 成了一個小痛點. 在Java環境中如果使用maven進行打包,其自帶插件就已經能很好的解決這個問題了,那麼在Nodejs環境是否也有相似的工具呢?這就是接下來本問要介紹的內容了~

使用NODE_ENV來區分不同環境

  • 定義: 是nodejs用來區分不同環境的設置,這個變量可以在nodejs的進程信息中(即process對象)查到
    • process 對象是一個全局變量,它提供有關當前 Node.js 進程的信息並對其進行控制。 作爲一個全局變量,它始終可供 Node.js 應用程序使用,無需使用 require()。 它也可以使用 require() 顯式地訪問:
    const process = require('process');
    
  • 設置方式:在不同的操作系統有不同的方式
    • linux & mac: export NODE_ENV=production
    • windows: set NODE_ENV=production
  • 使用方式:
//在需要用的地方做如下的判斷
//或者把配置放在一個js文件中統一進行判斷,然後需要的地方直接引用該js的變量即可
if (process.env.NODE_ENV === 'production') {
    // just for production code
}
  • 缺點:需要在部署環境上預先設定好NODE_ENV, 綁定了機器,這樣不是很合理,在本地做開發時使用還差不多。如果在上線的話,萬一哪天上了個新環境,沒設置這個變量,系統會默認設置爲development,就會產生一些預料之外的結果了

使用NPM來區分不同環境

這種方式可以看做是對NODE_ENV使用的進階版,將NODE_ENV的設置通過不同的運行命令來實現。

使用方式:

  • 使用cross-env實現跨平臺的NODE_ENV設置
  • 使用npm run COMMAND_NAME來實現對不同環境的設置. npm是nodejs使用的一種依賴管理器,具體可以查看參考鏈接1

例子:

{
  "name": "nodejs_demos",
  "version": "1.0.0",
  "scripts": {
    "dev": "cross-env NODE_ENV=dev nodemon src/app/app.js",
    "prod1": "cross-env NODE_ENV=product1 node src/app/app.js",
    "prod2": "cross-env NODE_ENV=product2 node src/app/app.js"
  },
  "keywords": [
    "Koa",
    "Node"
  ],
  "author": "Li Yi",
  "license": "ISC",
  "dependencies": {
    "cross-env": "^6.0.3",
    "express-validator": "^6.3.0",
    "fs.promised": "^3.0.0",
    "koa": "^2.3.0",
    "koa-body": "^2.3.0",
    "koa-bodyparser": "^4.2.1",
    "koa-compose": "^4.0.0",
    "koa-parameter": "^3.0.1",
    "koa-route": "^3.2.0",
    "koa-router": "^7.4.0",
    "koa-schema": "0.0.1",
    "koa-static": "^4.0.1",
    "log4js": "^6.1.0"
  }
}

例子說明:
* src/app/app.js是啓動程序
* 想要啓動xx環境的配置使用npm run xx命令即可, 譬如啓動dev環境的命令就是npm run dev

代碼實踐

準備

git clone https://gitee.com/oschinaLiyi/nodejs_demos.git
cd nodejs_demos
npm install

以dev環境配置啓動

npm run dev

啓動日誌如下: 可以到看到env中配置的當前的環境爲dev

> [email protected] dev /Users/liyi/workspace_java/gitee/nodejs_demos
> cross-env NODE_ENV=dev node src/app/app.js

env: {"currentEnv":"dev","logLevel":"debug"}
ready for service

執行命令

 curl http://localhost:3000/

返回當前的環境爲:dev
同時控制也可以看到這樣的日誌:

currentEnv:dev

以prod1環境配置啓動

npm run prod1

日誌如下:可以到看到env中配置的當前的環境爲prod1

➜  nodejs_demos git:(master) ✗ npm run prod1

> [email protected] prod1 /Users/liyi/workspace_java/gitee/nodejs_demos
> cross-env NODE_ENV=prod1 node src/app/app.js

env: {"currentEnv":"prod1","logLevel":"info"}
ready for service

參考文檔

  1. npm是什麼?
  2. cross-env怎麼用?
  3. process是什麼?
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章