Agenda
環境
- ts-node
- express
- nodemon
- typescript
- dotenv
やりたいこと
Viteみたいに、viteを起動するときに環境を指定すると、環境別のenvファイルが読み込まれる。以下のようなことをExpress JSでもやりたい。
pacakge.json:
"scripts": {
"dev": "vite --mode dev",
},
terminal:
npm run dev -> .env.dev が読み込まれる
対応
Node起動時にdotenv側でファイル読込の指定ができるため、それを利用する。
このファイルはデフォルトで読み込まれる。以下を記述
.env:
MY_ENV="this is .env"
今回このファイルを読み込めるようにする。以下を記述
.env.dev:
MY_ENV_DEV="this is .env.dev"
app.ts:
import * as dotenv from 'dotenv'; // expressより先にimportする
import createHttpError from "http-errors";
import express from "express";
・・・省略・・・
dotenv.config()
console.log(process.env.MY_ENV); // => this is .env
console.log(process.env.MY_ENV_DEV); // this is .env.dev
>
module.exports = app;
pacakage.json:
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon -r dotenv/config app.ts dotenv_config_path=.env.dev"
},
「nodemon -r dotenv/config <監視するファイル> dotenv_config_path=<読み込むファイル>」で指定できるっぽい。
ターミナル:
% npm run dev
start express server
[nodemon] restarting due to changes...
[nodemon] starting `ts-node -r dotenv/config app.ts dotenv_config_path=.env.dev`
this is .env
this is .env.dev
補足
pacakage.jsonを変更したら、nodeを再起動しないと反映されないため要注意。
参考
以下にコマンドラインオプションとして、dotenv_config_pathのことが書いてある。
dotenv - Preload