Edited at

node-configを使ってみた

More than 3 years have passed since last update.

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.jsondevelopment.jsonproduction.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"}