2016-08-26 8 views
1

私は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を生成させたいからではありません。

おかげ

+0

package.jsonで定義できる「bin」プロパティについて知っていましたか、cliのコマンドの 'tab'自動補完機能が不思議ですか? –

+0

私はbinプロパティを定義しましたが、これらの精巧なスクリプトは私には得られません。タブの完成を心配しない –

答えて

0

は、あなたのコマンドラインアプリケーションのためのエントリポイントとして機能するJavaScriptファイルの最上部に次の行を追加します

#!/usr/bin/env node

jmir for this answerに感謝します。