前回までのあらすじ
resolve.alias を使って環境毎に別のファイルを読み込ませる事ができました。
今回は .env を環境に毎に process.env に入れてビルドする方法をやってみましたの Tofu on Fire
dotenv-webpack プラグインを使う
dotenv-webpack プラグインを使えば .env ファイルを webpack を通じてプログラムに渡すことが出来るようなので、 ビルドのモードに応じて読み込ませる .env ファイルを変更すれば OK
webpack.config.js
const Dotenv = require('dotenv-webpack'); const enviroment = process.env.NODE_ENV || 'dev'; module.exports = { plugins: [ new Dotenv({ path: path.resolve(__dirname, `.env.${enviroment}`), }), ], }
npm-script
"scripts": { "build:dev": "NODE_ENV=dev webpack --config ./webpack.config.js", "build": "NODE_ENV=prod webpack --config ./webpack/config.js", }
dotenv-webpack プラグインで渡される .env ファイルはプログラム内では process.env からアクセスすることができます。
npm run build:dev の場合は .env.dev が、npm run build の場合は .env がそれぞれ読み込まれてビルドできるようになりました ✨
nodemon, ts-node からの実行時に .env ファイルを渡す
webpack dev-server を使って開発をするのであれば特に問題はないのですが、開発時は nodemon や ts-node でアプリを起動するのであれば webpack を介さないので dotenv-webpack プラグインで渡していた環境変数が undefined になってしまいます。
かと言ってプログラムに .env を読み込むコードを書いてしまうと本末転倒です。
dotenv は node 実行時に .env ファイルをプログラムに渡すことが出来る
dotenv を使ってプログラムから .env を読み込むような使い方をしていたのですが、node 実行時に -r dotenv/config オプションを付けて dotenv を require して実行させることで .env ファイルを渡すこともできるようです。
node 実行時に .env ファイルを指定して渡す方法
通常では .env ファイルが読み込まれますが dotenv_config_path=<読み込ませるファイル名> で環境変数ファイルを指定して読み込ませることができるようでした。
e.g .env.dev を読み込んで src/app.js を nodemon で実行させる場合
"scripts": { "dev": "nodemon -r dotenv/config src/app.js dotenv_config_path=.env.dev" }
ts-note を nodemon で実行する場合
nodemon.json の exec にある実行プログラムに -r dotenv/config, dotenv_config_path=オプションを追加すればOK
nodemon.json
{ "restartable": "rs", "env": { "NODE_ENV": "dev" }, "watch": [ "src" ], "ext": "js, ts, json", "exec": "ts-node -r dotenv/config ./src/app.ts dotenv_config_path=.env.dev" }
npm-scripts
"scripts": { "dev": "nodemon -L", }
npm run dev で .env.dev を読み込んだ状態で src/app.ts を変更を監視しながら開発が行えるようになりました!
₍ ᐢ. ̫ .ᐢ ₎👌 ヤッタネ!
[参考]
- GitHub - mrsteele/dotenv-webpack: A secure webpack plugin that supports dotenv and other environment variables and only exposes what you choose and use.
- dotenv - npm

- アーティスト:さよならポニーテール
- 発売日: 2019/06/12
- メディア: CD
