web-dev-qa-db-ja.com

ローカルにインストールされたNPMモジュールとグローバルにインストールされたNPMモジュール

私のpackage.jsonファイル、私はバウアー依存関係としてリストされています。私が実行した後npm install、バウアーは、ローカルにインストールされます。私はそれをローカルにインストールした後亭を実行しようとすると、私はエラーを取得します

「亭」は、内部または外部コマンドとして認識されていません

これを解決する唯一の方法は、グローバル亭インストールすることであるようです。なぜ私はこれをしなければならないでしょうか?私のプロジェクトは、バウアーのローカルコピーが含まれている場合は、なぜノードにそれを使用しないのだろうか?

30
Rigil

ローカルにインストールすると、(それがノードモジュール内node_modulesのすべてを保存する)現在のプロジェクトに亭利用できるようになります。これは通常、そのようなモジュールを使用するための唯一の良いvar module = require('module');あなたがそれをグローバルnpm install -g module NPMをインストールする場所をインストールするまでシェルが解決できることコマンドとして使用することはできませんそれは場所であなたのパス変数は、このコマンドをを解決する場所。

編集:このドキュメント かなりthorouglyそれを説明しています。

35
Jimi

あなたはCMDで以下の行を入力して、ローカル・インスタンスを実行することができます。

node_modules/bower/bin/bower <bower args>
19
Selameab

通常、NPMモジュールをパスに含めてコマンドラインから実行するには、NPMモジュールをグローバルにインストールします。それがローカルにインストールされているので、あなたはnode_modulesフォルダから実行する必要があります。

2
Joseph Dailey

PHPとJavaScriptの両方を使用するため、composerとnpmがあります。

私たちが取り組んでいる各プロジェクトには、パッケージの実行時とビルド/開発ツールの両方で異なるパッケージがあります。

(コマンドラインから実行されるだろう)グローバルパッケージのバージョンXをインストールする各プロジェクトでのバージョンの制約があるように、我々は各パッケージ内のすべてのツールをインストールし、私たちに問題を引き起こします。適切なcomposer.json/package.jsonファイルで定義するのがはるかに簡単です。

しかし、コマンドに常に追加のパスを追加する必要がある場合、CLIツールを実行するのは苦痛です。

そのために、適切な.bashrc(または同等のもの)の$PATHに次のパスを追加することをチームに推奨しています。

./vendor/bin:./node_modules/.bin

(編集:Windowsの場合、パスは.\vendor\bin;.\node_modules\.bin;になります)

したがって、プロジェクトXでは、そのプロジェクトのCLIツールにアクセスできます。プロジェクトYに切り替えて、プロジェクトツールを入手します。

確かに、あなたは重複を得ようとしているが、世界的なセットアップでの1つのバージョンを持つので、再び、各プロジェクトは、異なるチームによって維持されている(と一部の人が複数のチームであること)が問題です。

2