2

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を使用しています。

4

1 に答える 1

7

入れてみてください

#!/usr/bin/env node

demo-cli.jsファイルの先頭。

Windowsでは、ラッパーnpmを作成するときにこのシバンラインを探します。.cmd詳細については、ソースのcmd-shim.jsnpmを参照してください。

于 2012-06-06T02:35:55.280 に答える