npm run ***でカスタムコマンドを作る時のTips。

実行スクリプトを記載するとき以下のように追加していくことがよくある。

  "scripts": {
    "command1": "node command1.js",
    "command2": "node command2.js",
    ...
  },

が、オプションや環境変数などの引数を使った時、それぞれの値の取得方法は微妙に異なる。
例えば下記。

  "scripts": {
    "serve": "ENV_VALUE1=環境変数1 node index.js --option1 param1",
    ...
  },
# 実行コマンド
$ ENV_VALUE2=環境変数2 npm run serve --option2 param2

Node.jsの環境周りや実行コマンド周りはグローバル変数processから色々得られる。
上記の設定で色々ログをあたってみた。

console.log(process.env.ENV_VALUE1, process.env.ENV_VALUE1)
// "環境変数1" "環境変数2"

console.log(process.argv)
// [
//   '/home/user/.nvm/versions/node/v*.*.*/bin/node', => node環境フォルダ
//   '/home/user/js-playground/index.js',               => 実行ファイル 
//   '--option1',
//   'param1',
//   'param2'
// ]

console.log(JSON.parse(process.env.npm_config_argv).original)
// [
//   'run',
//   'serve',
//   '--option2',
//   'param2'
// ]

結論から言うと、環境変数はprocess.env、コマンドライン引数はprocess.argvからとってこれる。
しかし実行時に--が付いたオプションのみprocess.argvからは取ってこれないため、

JSON.parse(process.env.npm_config_argv).original

を使用する。

もっと良いやり方あれば教えてください。

プロフィール画像

ふじわら

よくわからないもので戯れてたら自分のことすらよくわからない人間になってしまいました。

ひっそりYouTubeしてます。