私はnodejsコマンドラインツールを書いています。含むnpmパッケージをインストールしたときに.binで動作するスクリプトを取得するには?
"$basedir/../myapp/dist/myappcli.js" "[email protected]"
exit $?
node_modules/.bin/myapp.cmd
を:含む
node_modules/.bin/myapp
:
npm install
を実行し、ローカルで実行しようとすることでテストすると、NPMはnode_modules/.binファイルに以下のファイルを作成します。
"%~dp0\..\myapp\dist\myappcli.js" %*
それほど有用ではありません。含む
node_modules/.bin/typings
:
#!/bin/sh
basedir=`dirname "$0"`
case `uname` in
*CYGWIN*) basedir=`cygpath -w "$basedir"`;;
esac
if [ -x "$basedir/node" ]; then
"$basedir/node" "$basedir/../typings/dist/bin.js" "[email protected]"
ret=$?
else
node "$basedir/../typings/dist/bin.js" "[email protected]"
ret=$?
fi
exit $re
一方 は、私は、このようなJS-YAMLやタイピングなどの人気nodejs CLIツールをインストールするとき、私ははるかに便利なファイルを取得します
node_modules/.bin/typings.cmd
含有:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\typings\dist\bin.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\typings\dist\bin.js" %*
)
これらは実際にアプリを正常に実行します。なぜ彼らはこの素晴らしいものを手に入れますか?私のアプリがこれを提供するにはどうすればいいですか?それをnpmホストにアップロードする前にtgzに手動でファイルを追加する必要がありますか?私は、githubから直接アプリケーションをインストールできるようにしたい、あるいは少なくともnpm packで最終的なtgzを生成させたいからではありません。
おかげ
package.jsonで定義できる「bin」プロパティについて知っていましたか、cliのコマンドの 'tab'自動補完機能が不思議ですか? –
私はbinプロパティを定義しましたが、これらの精巧なスクリプトは私には得られません。タブの完成を心配しない –