Windowsでnodeのコマンドラインツールを作り、globalインストールして流してみると、引数が取得されず、首を傾げていた。
下記のように、nodeを指定して、jsファイルを直接いじれば正常に動作する。
a.bat
node cli.js hoge huga
上記では、hogeとhugaが引数として取得されるとする。
しかし、コマンドを直接うつと
b.bat
cli hoge huga
引数が認識されない。
調査
そこで、cliコマンドの中身(cli.cmd)を見てみると
cli.cmd
@%~dp0\.\node_modules\npm\bin\cli.js" %*
上記は、npmによって自動生成される。
Windowsのデフォルトでは、jsファイルを実行した場合、jscriptが使われる。
つまりnpmの自動生成によるcmdファイルが誤っていたことになる。
解決法
最初は、Windowsのjsファイルへのプログラムの紐付けを直せば解決すると踏んでいたが、そう簡単ではなかった。
node 〜.jsという形にする必要がありそうだった。
少し調べていると、下記のようにcli.jsの先頭に、#!/bin/env node
をつければよかったようだ。
cli.js
#!/bin/env node
// 以下ソース
これにより、npmの動作が変わるようになっているらしい。