2017-04-07 17 views
0

コマンドラインユーティリティを作成しようとしています。しかし、npm install(no -g)は実行可能ファイルをリンクしません。最小限のコマンドラインユーティリティ用package.json

私の期待するところは、npm installは自分の実行ファイルをローカルにインストールすることです。

マイpackage.jsonは、次のようになります。です

{ 
    "name": "test-bin", 
    "version": "0.1.0", 
    "description": "Test bin", 
    "bin": "./bin/test-bin.js", 
    "main": "./index.js", 
    "author": "", 
    "license": "ISC", 
    "repository": { 
    "type": "git", 
    "url": "file:///tmp/test-bin.git" 
    } 
} 

index.jsを:

module.exports = function() { 
    console.log('invoked') 
} 

ビン/テストbin.jsは次のとおりです。

require('../')() 

私はNPMを実行した場合install、node_modulesが作成されますが、.binではありません。

は、しかし、依存関係として最初に使用して別の場所で別のプロジェクト作成した場合:

{ 
    "name": "test-test-bin", 
    "version": "0.1.0", 
    "description": "Test test bin", 
    "author": "", 
    "license": "ISC", 
    "repository": { 
    "type": "git", 
    "url": "file:///tmp/test-test-bin.git" 
    }, 
    "dependencies": { 
    "test-bin": "file:///Users/you/somewhere/test-bin" 
    } 
} 

は、そのプロジェクト内のリンク実行可能ファイルをインストールNPM:

node_modules/.bin/test-bin 

をNPMのドキュメントは、「ビン」について、こう述べています。

これを使用するには、ローカルのファイル名に コマンド名のマップであるあなたのpackage.jsonにビンフィールドを提供します。インストール時に、npmはグローバルインストールの場合は というファイルを接頭辞/ binにシンボリックリンクし、 のローカルインストールの場合は./node_modules/.bin/をシンボリックリンクします。

これは設計されたものなのでしょうか、それとも何か不足していますか?

答えて

1

npm installをパッケージフォルダ内で実行すると、依存関係がインストールされますが、パッケージ自体が宣言しているバイナリはインストールされません。

パッケージがパッケージとしてインストールされている場合(npm install package-nameを使用するか、他のパッケージに依存する場合)にのみ発生します。

+0

これは私が守っていることです。それはドキュメントが何を言っているかと直接矛盾しているようです。だから、それはバグでしょうか、私はドキュメンテーションを誤解していますか、あるいは私がやる必要のあるプロセスに何かを残していますか? – wdkendall

+0

ああ、ドキュメントがどういう意味か分かりました。ローカルインストールとは、実行可能ファイルを依存関係として持つパッケージのローカルインストールを意味します。 – wdkendall

+0

あなたは正しいです:あなたはローカル( 'npm install package-name')とグローバル(' npm install package-name -g')のインストールがあります。違いはインストールされたパッケージが終わる場所です( '。/ node_modules'ローカルの場合はシステム全体の 'node_modules'をグローバルに使用します)。 _just_ 'npm install'を実行してもAFAIKのような名前はありませんが、依存関係をインストールするのは何ですか。 – robertklep

関連する問題