私のpackage.json
ファイル、私はバウアー依存関係としてリストされています。私が実行した後npm install
、バウアーは、ローカルにインストールされます。私はそれをローカルにインストールした後亭を実行しようとすると、私はエラーを取得します
「亭」は、内部または外部コマンドとして認識されていません
これを解決する唯一の方法は、グローバル亭インストールすることであるようです。なぜ私はこれをしなければならないでしょうか?私のプロジェクトは、バウアーのローカルコピーが含まれている場合は、なぜノードにそれを使用しないのだろうか?
ローカルにインストールすると、(それがノードモジュール内node_modules
のすべてを保存する)現在のプロジェクトに亭利用できるようになります。これは通常、そのようなモジュールを使用するための唯一の良いvar module = require('module');
あなたがそれをグローバルnpm install -g module
NPMをインストールする場所をインストールするまでシェルが解決できることコマンドとして使用することはできませんそれは場所であなたのパス変数は、このコマンドをを解決する場所。
編集:このドキュメント かなりthorouglyそれを説明しています。
あなたはCMDで以下の行を入力して、ローカル・インスタンスを実行することができます。
node_modules/bower/bin/bower <bower args>
通常、NPMモジュールをパスに含めてコマンドラインから実行するには、NPMモジュールをグローバルにインストールします。それがローカルにインストールされているので、あなたはnode_modules
フォルダから実行する必要があります。
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つのバージョンを持つので、再び、各プロジェクトは、異なるチームによって維持されている(と一部の人が複数のチームであること)が問題です。