package.jsonのscriptsに引数を渡す方法
package.jsonのscriptsに引数を渡す方法をご紹介します。
方法
コマンドの後に、-〇〇=??
を加えるとpackage.jsonのコマンド内で ??
の部分を $npm_config_〇〇
で取得できます。
例
上の説明だけだとわかりづらいので例をあげます。
まずpackage.jsonのscriptsは以下のようになっているとします。
{
...
"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を以下のように書き換え、
{
...
"scripts": {
"test": "echo username is $npm_config_nameTaro"
},
...
}
下記コマンドを実行します。
npm run test -name='Yamada'
この場合は、username is
としか表示されません。
これは $npm_config_nameTaro
となっているので -name=??
ではなく -nameTaro=??
と指定しないといけないですね。
しかしこれだと Taro
が表示されません。
ではどうすれば良いか?
方法は簡単です。以下のように {}
を使います。
{
...
"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