node.jsコマンドラインユーティリティを作成しようとしていますが、npmが生成するラッパーに問題があります。私の超シンプルなデモはpackage.jsonファイルです:
{
"name": "demo-cli",
"version": "0.0.1",
"bin": { "demo": "bin/demo-cli.js" }
}
そして、demo-cli.jsファイル:
console.log('DEMO WORKED');
問題は、プロジェクトディレクトリ内でモジュールを使用してモジュールをインストールすると、モジュールnpm install -g
が生成するラッパーがファイルをパラメーターとしてノードを呼び出さないことです。これは、demo.cmdの生成されたコンテンツです。
:: Created by npm, please don't edit manually.
"%~dp0\.\node_modules\demo-cli\bin\demo-cli.js" %*
UNIXバージョンにも同じ問題があります。グローバルにインストールされている別のCLIを見ると、ノードがテストされ、期待どおりに呼び出されていることがわかります。
:: Created by npm, please don't edit manually.
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\.\node_modules\mocha\bin\mocha" %*
) ELSE (
node "%~dp0\.\node_modules\mocha\bin\mocha" %*
)
npmが適切なスクリプトファイルを生成するために必要な秘密のソースは何ですか?.js拡張子の削除、グローバルの優先、ノードバージョンの指定など、見つけたり考えたりできるすべてのことを試しましたが、運が悪かったです。
Windows7x64でノードv0.6.18とnpmv1.1.21を使用しています。