🕌

package.jsonのscriptsに引数を渡す方法

2021/07/29に公開

package.jsonのscriptsに引数を渡す方法をご紹介します。

方法

コマンドの後に、-〇〇=?? を加えるとpackage.jsonのコマンド内で ??の部分を $npm_config_〇〇 で取得できます。

上の説明だけだとわかりづらいので例をあげます。
まずpackage.jsonのscriptsは以下のようになっているとします。

package.json
{
  ...
  "scripts": {
    "test": "echo username is $npm_config_name Taro"
  },
  ...
}

この状態で以下のコマンドを実行します。

npm run test -name='Yamada'

すると画面には username is Yamada Taro が表示されます。$npm_config_nameがYamadaに変わっています。コマンドに引数が渡せたのが分かりますね。

例2

では、username is YamadaTaro と表示させたい場合にはどうすれば良いでしょうか?

package.jsonを以下のように書き換え、

package.json
{
  ...
  "scripts": {
    "test": "echo username is $npm_config_nameTaro"
  },
  ...
}

下記コマンドを実行します。

npm run test -name='Yamada'

この場合は、username is としか表示されません。
これは $npm_config_nameTaro となっているので -name=?? ではなく -nameTaro=?? と指定しないといけないですね。

しかしこれだと Taro が表示されません。

ではどうすれば良いか?

方法は簡単です。以下のように {} を使います。

package.json
{
  ...
  "scripts": {
    "test": "echo username is ${npm_config_name}Taro"
  },
  ...
}

これで以下のコマンドを実行すると username is YamadaTaro が表示されます。

npm run test -name='Yamada'

終わりに

今までpackage.jsonのscriptsに引数を渡すようなことはなかったのですが、今回引数を渡す必要が生じ調べてみました。

ちなみになんで引数を渡す必要が生じたのかと言いますと、アプリをデプロイするためです。元々はpacakage.jsonのscriptsにipアドレスを直接書き、デプロイを行なっていました。しかし改修作業に伴い、デプロイ先が踏み台サーバーに変わりました。そしてその踏み台サーバーは常に起動しているわけではないのでIPアドレスが毎回変わります。

その踏み台サーバーのIPを引数として渡し、コマンド内で使用したいと思ったのでpackage.jsonのscriptsに引数を渡す方法を調べることになりました。

あんまり使う機会はないかもしれませんがもしpackage.jsonのscriptsに引数を渡したいと思ったら参考にしてみてください。

Discussion