npmとpackage.jsonの小ネタ - 設定値を埋め込む

大分前に調べてメモしていたのだけど、記事として書いていなかったようなので書いておこうかと。


package.jsonにconfigというキーで以下に設定値などを書いて、npm startで起動すると設定値がprocess.envに設定されます。
node-configとか使うほどじゃないし、別の設定用のJSONファイルを用意してrequireする程でもないし、という場合には良いかもしれません。
npm startで起動しないと動作しないよ、という風にも出来るかも。

package.json
{
  "name": "aaa",
  "version": "0.0.0",
  "scripts": {
    "start": "node index.js"
  },
  "config": {
    "int": 1234,
    "str": "conf"
  }
}
index.js
#!/usr/bin/env node

console.log(process.env.npm_package_config_int);
console.log(process.env.npm_package_config_str);

なんてファイルを用意して、npm startで実行すると……

$ npm start
1234
conf

なんて出力になると思います。
configの下に配列やらオブジェクトを追加しても見れなかったのは、そこまで複雑なのは扱わないということなのか、なんなのか……


追記:
配列とかも扱えるみたい。

{
  "name": "aaa",
  "version": "0.0.0",
  "scripts": {
    "start": "node index.js"
  },
  "config": {
    "str": "conf",
    "arr": [
      1, 2, 3, 4, 5
    ],
    "obj": {
      "a": 1,
      "b": 2,
      "c": 3
    }
  }
}
#!/usr/bin/env node

console.log(process.env.npm_package_config_arr_0);
console.log(process.env.npm_package_config_arr_1);
console.log(process.env.npm_package_config_arr_2);
console.log(process.env.npm_package_config_arr_3);
console.log(process.env.npm_package_config_arr_4);
console.log(process.env.npm_package_config_obj_a);
console.log(process.env.npm_package_config_obj_b);
console.log(process.env.npm_package_config_obj_c);

とか。普通にpackage.jsonをrequireした方がいいわ……