在不同的環境運行下,會有不同的資料庫/不同的網址/不同的連線帳密/廠商測試或正式網址,進行設定檔切換系統連線字串。
專案練習:
express-example - 專案名稱
|- node_modules - node 套件資料夾
|- config/
|-config.dev.json - 使用 `config` 套件
|-config.prod.json - 使用 `config` 套件
|- index.js
|- .env.dev - 使用 `dotenv` 套件
|- .env.prod - 使用 `dotenv` 套件
|- package.json - npm 操作之Json檔案
|- package-lock.json - npm 相依套件之位置
基本使用
index.js
修改成
console.log(process.env.KEY)
package.json
中的scripts
修改成
"scripts":{
"start": "KEY=HelloWorld node ./index.js"
}
在這個專案下面終端機介面輸入
npm run start
Hello World.
dotenv v8.2.0
"scripts": {
"dev": "node -r dotenv/config index.js dotenv_config_path=.env.dev", // 指定file `.env.dev`
"prod": "node -r dotenv/config index.js" // 預設的file `.env`
},
.env.dev
KEY=Dev dotenv
.env
KEY=Prod dotenv
index.js
console.log(process.env.KEY)
運行npm run dev
/npm run prod
查看不同。
config v3.3.1
"scripts": {
"dev": "NODE_ENV=dev node index2.js", // 指定file `.env.dev`
"prod": "node index.js" // 預設的file `.env`
},
config/dev.json
{
"KEY":"Dev config"
}
config/default.json
{
"KEY":"Prod config"
}
index.js
var config = require('config');
var KEY = config.get('KEY');
console.log(KEY)
運行npm run dev
/npm run prod
查看不同。
Node Dockerfile
FROM node:lts
WORKDIR /app
COPY package* /app/
RUN npm install
FROM node:lts-alpine
WORKDIR /app
COPY --from=0 /app/ /app/
COPY . /app/
EXPOSE 3001
CMD [ "npm", "run", "prod" ]
小結
dev
與prod
兩個環境,在Docker容器化後的攥寫,這樣的環境分類只有本地使用和線上使用,那多一個環境呢?有什麼簡單的方式呢?
- 需熟悉Dockerfile撰寫改寫流程。
- 若有使用 Kubernates 可使用 ConfigMap 替換。
關於環境變數有很多特別的用法,算是一種服務託管的資料去做替換使用。
非常多的使用時機,可以花一點時間了解。