node-config とは、以下に示すような機能を提供してくれるパッケージ。
- アプリケーションのデプロイに対する、階層的な設定を管理することできる。
- デフォルト設定を定義することができ、developmentやproductionなど、異なるデプロイ環境に拡張することができる。
- 設定は、アプリケーション内に保存され、環境変数やコマンドラインパラメータ、外部ソースにより上書きすることができる。
詳細は、node-configのREADMEにて。
準備する
適当にプロジェクトを作り、node-configをインストールする。
$ npm init
$ npm install config --save
$ touch index.js
index.js
のコードは以下。
var config = require('config');
console.log("NODE_ENV=%s", process.env.NODE_ENV);
console.log(JSON.stringify(config));
configファイルを作る。config
ディレクトリ配下に、default.json
、development.json
、production.json
を作る。各ファイルの内容は、ここから参照可能。
.
├── config
│ ├── default.json
│ ├── development.json
│ └── production.json
├── index.js
├── node_modules
│ └── config
└── package.json
試してみる
NODE_ENVをいろいろ変えて、動かしてみる。
NODE_ENV=development
期待通り、config/development.json
が読み込まれている。
$ NODE_ENV=development node index.js
NODE_ENV=development
{"message":"This is a development config"}
NODE_ENV=production
期待通り、config/production.json
が読み込まれている。
$ NODE_ENV=production node index.js
NODE_ENV=production
{"message":"This is a production config"}
NODE_ENVに指定しない
何も指定しないと、config/development.json
が読み込まれた。config/default.json
が読み込まれることを期待していたが、結果は異なった。
$ node index.js
NODE_ENV=undefined
{"message":"This is a development config"}
NODE_ENVに何も設定しない場合、config/development.json
というファイルが存在すれば、それを読み込むのかもしれない。
試しに、config/development.json
を、config/dev.json
に変更して再度実行してみた。すると、config/default.json
が読み込まれたので、そういうことなのだろう。
$ node index.js
NODE_ENV=undefined
{"message":"This is a default config"}
NODE_ENV=hoge
誤った値が設定されていると、config/default.json
が読み込まれる。
$ NODE_ENV=hoge node index.js
WARNING: NODE_ENV value of 'hoge' did match any deployment config file names.
WARNING: See https://github.com/lorenwest/node-config/wiki/Strict-Mode
NODE_ENV=hoge
{"message":"This is a default config"}