Node.jsを( browserify を使用して)各Webアプリに使用します。これらのアプリにはすべて共通の依存関係と、固有の依存関係があります。これらのアプリにはそれぞれ、必要なモジュールのバージョンを指定する_package.json
_ファイルがあります。
現在、すべてのモジュールが参照する必要のあるモジュールのアプリの親フォルダーに_/node_modules
_ディレクトリがあり、アプリ固有のモジュールをそのアプリのディレクトリの_node_modules
_フォルダーに配置しています。私のrequire()
ステートメントは、正しいアプリが含まれる_node_modules
_ディレクトリを見つけるまでファイル構造を上方向に見続けることができるため、これは短期的には正常に機能します。
これが難しいのは、古いプロジェクトに戻って_npm install
_を実行して、必要な依存関係をすべて見つけられるようにする場合です。 (その後、親ディレクトリレベルでおかしなビジネスが発生したことを知っている人。)_npm install
_がこれを行ったという印象を受けました。
package.json
_にリストされている各モジュールについて、最初にそれが存在するかどうかを確認し、require
が同じようにディレクトリを上に移動します。そうでない場合は、ローカルの_node_modules
_ディレクトリにインストールします(必要に応じてそのディレクトリを作成します)。ただし、アプリフォルダー内で_npm install
_を実行すると、他にアップストリームが存在する場所に関係なく、すべてをローカルにインストールするように見えます。それは正しい動作ですか? (_package.json
_のバージョン言語が悪いなど、別の理由がある可能性があります)。これがIS正しい動作である場合、_npm install
_を上記のように動作させる方法はありますか?
すべてのアプリ内でモジュールを広く複製することは大したことではありませんが、面倒な感じがあり、一般的なモジュールを少し改善し、古い_package.json
_ファイルをすべて更新する必要はありません。もちろん、これは良いことかもしれません...
ただし、アプリフォルダー内でnpm installを実行すると、アップストリームにどこにあるかに関係なく、すべてをローカルにインストールするように見えます。それは正しい動作ですか? (私のpackage.jsonに不適切なバージョンの言語があるなど、別の理由がある可能性があります)。これがIS正しい動作である場合、npmインストールを上記のように動作させる方法はありますか?
はい、それがnpm installの機能です。 node.jsコードでは、require
アルゴリズムには、ファイルシステムの探索など、特定の一連の場所があります。しかしながら、 npm install
はそれをしません。所定の場所にインストールするだけです。使用するアルゴリズムはすべて、単一のnode_modules
ディレクトリは現在のディレクトリの下にあり、その上には何も触れません(-g
)。
すべてのアプリ内でモジュールを広く複製することは大したことではありませんが、面倒であり、一般的なモジュールを少し改善したり、古いpackage.jsonファイルをすべて更新したりする必要がありません。もちろん、これは良いことかもしれません...
ええ、基本的にあなたは間違っています。通常のワークフローは、インターネットに適しています。ユースケースでは、余分な面倒な作業が発生しますが、セマンティックバージョニングを意図したとおりに使用し、"mylib": "^1.0.0"
アプリのpackage.jsonで、次回に自動的に新しいバージョンを取得しても問題ありませんnpm install
。