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.jsonのname
と異なると取れない。
$ 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:hokacchaのnode-confyとかの方がお手軽で良いと思います。