--
記号を使う
npm run
コマンドの末尾に--
記号を書き、空白に続けて文字列を書くと、その文字列がスクリプトにそのまま渡されるようです。
package.json
に下記のようなスクリプトが用意されている場合にpackage.json
ファイルを書き換えることなく、--host 0.0.0.0
という引数を追加する方法を探していました。
{
"scripts": {
"start": "yarn check-env && ng serve"
}
}
以下のようなコマンドを実行すると
npm run start -- --host 0.0.0.0
下記のように処理されるようです。
yarn check-env && ng serve --host 0.0.0.0
拝見した情報源
メモ書き
サイトには下記のような説明がされていました。
As of npm@2.0.0, you can use custom arguments when executing scripts. The special option -- is used by getopt to delimit the end of the options. npm will pass all the arguments after the -- directly to your script:
npm@2.0.0からは、スクリプトの実行時にカスタム引数を使用できます。特別なオプション
--
は、オプションの終わりを区切るためにgetopt
によって使用されます。 npmはすべての引数をスクリプトの後に渡します:
どうやら、
-
npm
はgetopt
という仕組みを使って、コマンドラインに渡される文字列を解析している -
getopt
は--
記号より後ろの部分は、1つの文字列として解釈する -
npm
はこの仕組みを利用して--
記号の後の文字列を取り出し、npm script
の後ろに渡している
ということっぽいです。
下記のコマンドを
npm run start -- --host 0.0.0.0
下記の2つの部分に分けたのはgetopt
の仕業で、
run start
--host 0.0.0.0
手に入れた文字列--host 0.0.0.0
を
yarn check-env && ng serve
の後ろに付け足して
yarn check-env && ng serve --host 0.0.0.0
にしたのはnpm
の仕業ということのようですね。