npm configで設定値を管理

npmって意外と高機能で、色んなこと(こんなのとか)が出来る。
で、最近知ったのがnpm config
https://github.com/isaacs/npm/blob/master/doc/config.md
ちゃんとドキュメント見たことなかったから知らなかったけど、これで諸々の設定値を保存しておいたりできる、とのこと。
例えば

$ npm config set foo bar
$ npm config get foo
bar

こんなカンジでkeyとvalueを設定する。list表示でまとめて確認も可能。

$ npm config list
; userconfig /home/sugyan/.npmrc
foo = "bar"

; node install prefix = /home/sugyan/.nvm/v0.4.11
; node bin location = /home/sugyan/.nvm/v0.4.11/bin/node
; cwd = /home/sugyan/temp/hoge
; HOME = /home/sugyan
; 'npm config ls -l' to show all defaults.

で、この設定値はnpmから起動したscriptで環境変数から得ることが出来る。

console.log(process.env.npm_config_foo) 

というscriptを普通に実行するとundefinedしか出力されないが、

{
    "name": "hoge",
    "version": "0.0.1"
}

のように適当なpackage.jsonファイルを用意して そこから実行してやると、npm configで設定された値が取れる。

$ node server.js
undefined
$ npm start

> hoge@0.0.1 start /home/sugyan/temp/hoge
> node server.js

bar

また、コマンドのオプションに値を渡すこともできる。

$ npm start --foo baz

> hoge@0.0.1 start /home/sugyan/temp/hoge
> node server.js

baz


色々な設定値を弄ることができるが、package毎に設定、ということもできて

$ npm config set hoge:fuga piyo

のように[@]:というキーで登録すると、

console.log(process.env.npm_package_config_fuga)

と、npm_package_config_という形で値を取得できる。

$ node server.js
undefined
$ npm start

> hoge@0.0.1 start /home/sugyan/temp/hoge
> node server.js

piyo

package固有なので、package.jsonnameと異なると取れない。

$ vim package.json
$ cat package.json
{
    "name": "hogehoge",
    "version": "0.0.1"
}
$ npm start

> hogehoge@0.0.1 start /home/sugyan/temp/hoge
> node server.js

undefined


consumer_secretなどの公開したくない値を含むソースコードを公開レポジトリにアップするときなどはコレを使うのもアリかもしれない。
ただし、毎回package.jsonを用意する必要があるので ちょっとしたscriptなんかはpitのように使えるid:hokacchanode-confyとかの方がお手軽で良いと思います。