Package.json bin
プロパティを介してCLIツールを起動しようとしています。
私は次のものを持っています:
...
"name": "mycli",
"bin": "./bin/mycli",
...
パッケージパスでcmdを開き、「mycli」と入力すると、コマンドが認識されないというメッセージが表示されます。
Npmコマンドを実行する必要がありますか?またはscriptsプロパティを使用しますか? binプロパティに誤ってアクセスしようとしていますか?
次のように、cli
プロパティでbin
ツールの名前を指定してみてください。
"bin": {
"mycli": "./bin/mycli" // or "/bin/mycli.js" if it's a .js file
}
次に、プロジェクトフォルダー内からnpm link
を実行して、現在のフォルダーへのグローバルシンボリックリンクを作成します。
モジュールをグローバルにインストールするようにユーザーに警告するために、"preferGlobal": "true"
ファイルのbin
プロパティの直前にpackage.json
プロパティを追加することを忘れないでください。
アプリをリンクさせようとすると、Windowsで問題が発生し続け、パス上で実行される生成されたスクリプトが、デフォルトのWindows実行可能ファイルを使用して*.js
ファイルを実行しようとしました(何がわかりません)。それはそうなるでしょう)。理由はわかりません。 JavaScriptファイルだからかもしれないと思います。ただし、生成されたスクリプトをインストールした他のモジュールと比較したところ、package.json
によって参照されるbin
ファイルを、で実行されるかのように動作させることがわかりました。 *nix
マシン、npm
は自動的にノードへの呼び出しを追加しようとしますが、.
例えば:
私のpackage.json
が次のようになっている場合:
"name": "myapp",
"bin": {
"myapp": "./bin/myapp"
}
私の参照するbinファイルは次のようになります。
#!/usr/bin/env node
require("../server.js");
%APPDATA%\npm
に表示される2つの生成された実行可能ファイルは、myapp
ディレクトリ(ルートにnpm link
が含まれる)内からコマンドpackage.json
を実行すると次のように表示されます。
#!/bin/sh
basedir=`dirname "$0"`
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/node_modules/myapp/bin/myapp" "$@"
ret=$?
else
node "$basedir/node_modules/myapp/bin/myapp" "$@"
ret=$?
fi
exit $ret
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\myapp\bin\myapp" %*
) ELSE (
node "%~dp0\node_modules\myapp\bin\myapp" %*
)
上記の2つのファイルを明示的に作成する必要はなく、ファイルをpackage.json
のbin
ファイルとして実行する必要があることに注意してください。 npm
がファイルの作成を行いました。
この方法を使用しているときに遭遇したもう1つの注意点は、行末が正しいことを絶対に確認することです。 * nixマシンにインストールするたびに、行末が正しくないため、ビンに「:そのようなファイルまたはディレクトリはありません」というエラーが表示されていることに気付きました。おかげで テキストファイルで行末を表示 たとえば、表示されている行末を印刷する方法。
たとえば、cat -e PATH_TO_BIN
を実行して、次のようなものを取得した場合:
#!/usr/bin/env node^M$
^M$
require("../index.js");^M$
間違った行末を使用しています。あなたがこのようなものを手に入れたら:
#!/usr/bin/env node$
$
require("../index.js");$
それらは正しい行末でなければなりません。
Rodrigo Medeirosからの回答は私には有効ですが、.jsファイルにShebang行が多すぎる場合に限ります。
そこで別の問題がありました。 node.jsをc:\ Program files\nodejsにインストールしましたが、これが私のShebang行でした。
#!c:/program files/nodejs/node
空白のため、これは機能しませんでした。これは正しいものでした:
#!c:/progra~1/nodejs/node
入れたら
#!/usr/bin/env node
スクリプトの最初の行で、npmは必要なラッパースクリプトを作成します。