{
....
"scripts": {
"c1": "command1"
},
....
}
と書けば 「npm run c1」 で command1 というコマンドを実行できます
この command1 に当たるコマンドは通常 npm などでインストールしたパッケージに含まれるコマンドです
推奨される方法ではないですが 直接 node_modules フォルダ内に .bin/command1 というファイルを配置すれば実行できます
#!/usr/bin/env node
console.log(123)
という中身にします
Windows の場合は command1.cmd のように cmd 拡張子をつけて 中身は cmd ファイル (bat ファイル) にします
.js ファイルを実行するなら node コマンドを呼び出します
Linux の場合はファイルの実行権限が必要なので chmod で追加します
これで 「npm run c1」 を実行すると
root@abc0c5fc3c92:/mnt/88# npm run c1
> 88@1.0.0 c1
> command1
123
のように実行されます
ここで command1 は存在してパスの通っているコマンドやシェルのビルトインと同名でも大丈夫です
例えば
{
....
"scripts": {
"c1": "ls"
},
....
}
として node_modules/.bin/ls にファイルをおけば この ls が実行されます
ファイルの一覧が表示されたりはしません
しかし command というコマンドにした場合 なぜかシェルビルトインが優先されるような動きで node_modules/.bin/command が使用されないです
root@abc0c5fc3c92:/mnt/88# npm run c1
> 88@1.0.0 c1
> ls
123
root@abc0c5fc3c92:/mnt/88# npm run c1
> 88@1.0.0 c1
> command
123 が表示されていません
npm でも yarn でも同じ結果です
Windows では command.cmd を実行するからか問題ないです
たぶん Linux 側の仕様によるものな気がしますが これにハマって時間をとられました