node-configが進化してた件

以前config系のモジュール色々調べてたのだけど(Nodeアプリの設定系モジュールいろいろ - すぎゃーんメモ)、その後久々にnode-configを覗いてみたら大幅に進化していてビックリしたのでメモ。
まずオンラインドキュメントがしっかり作られてる。
http://lorenwest.github.com/node-config/latest/
ざっと読んだカンジでの挙動は

  • 設定ファイルはyaml, json, jsのいずれかの形式
  • デフォルトでは"./config/default.format"が読まれる
  • その他にhost名を使ったファイル名、NODE_ENV環境変数で指定したファイル名も使える
  • 上記にマッチするものから設定をそれぞれ読み取り、複数あればいいかんじにマージしてくれる
  • 実行中にも"runtime.json"ファイルを監視して、プログラム実行中でもそれが変更されるとその設定を反映してくれる(08/15 追記アリ)
  • 設定がプログラム実行中に変更された場合は逆に"runtime.json"に保存される
$ cat hoge.js
var config = require('config');
setInterval(function () {
    console.log('%s: %s', new Date(), config.hoge.fuga);
}, 1000);
$ cat config/default.json
{
    "hoge": {
        "fuga": "piyo"
    }
}
$ node hoge.js
Sun Jul 31 2011 01:44:14 GMT+0900 (JST): piyo
Sun Jul 31 2011 01:44:15 GMT+0900 (JST): piyo
Sun Jul 31 2011 01:44:16 GMT+0900 (JST): piyo
Sun Jul 31 2011 01:44:17 GMT+0900 (JST): foobar
Sun Jul 31 2011 01:44:18 GMT+0900 (JST): foobar
Sun Jul 31 2011 01:44:19 GMT+0900 (JST): foobar

hoge.js 実行中にconfig/runtime.jsonを書き換えた

var fs = require('fs');
var config = require('config');
setInterval(function () {
    config.hoge.fuga = new Date().toLocaleString();
    var data = fs.readFileSync('./config/runtime.json', 'utf8');
    console.log(data);
}, 1000);
$ node fuga.js
{
  "hoge": {
    "fuga": {}
  }
}
{
  "hoge": {
    "fuga": "Sun Jul 31 2011 01:54:18 GMT+0900 (JST)"
  }
}
{
  "hoge": {
    "fuga": "Sun Jul 31 2011 01:54:19 GMT+0900 (JST)"
  }
}
{
  "hoge": {
    "fuga": "Sun Jul 31 2011 01:54:20 GMT+0900 (JST)"
  }
}
{
  "hoge": {
    "fuga": "Sun Jul 31 2011 01:54:21 GMT+0900 (JST)"
  }
}
{
  "hoge": {
    "fuga": "Sun Jul 31 2011 01:54:22 GMT+0900 (JST)"
  }
}

↑データが変わるたびにruntime.jsonの中身も書き替わる


setModuleDefaultsで諸々のデフォルト値を変えたりなんかもできるみたい。

追記

上記の挙動はv0.4.2のもの。
0.4.3ではデフォルトではruntime.jsonのファイル監視を行わず、watchForConfigFileChanges()を明示的に呼ぶことでファイルの監視が始まるように変更されている模様。