私はNode.js(経由ブラウザ化) を各 Web アプリにインストールします。すべてのアプリには共通の依存関係とアプリ固有の依存関係があります。これらのアプリにはそれぞれ、package.json
どのモジュールのどのバージョンが必要かを指定するファイルがあります。
現在、/node_modules
アプリの親フォルダーに、すべてのアプリが参照する必要のあるモジュール用のディレクトリがあり、アプリ固有のモジュールをそのアプリのディレクトリ内のフォルダーに配置しています。ステートメントは、正しいアプリを含むディレクトリが見つかるまでファイル構造を上方向に検索し続けることができるnode_modules
ため、短期的には問題なく動作します。require()
node_modules
これが厄介になるのは、古いプロジェクトに戻って実行し、npm install
必要な依存関係がすべて見つかるかどうかを確認したいときです。(それ以降、親ディレクトリ レベルでどのようなおかしなことが起こったかは誰にもわかりません。) 私は次のようにしたという印象を持っていましたnpm install
。
- にリストされている各モジュールについて
package.json
、まずそれが存在するかどうかを確認します。同じようにディレクトリを上に移動するrequire
とそうでない場合は、ローカルnode_modules
ディレクトリにインストールします (必要に応じてディレクトリを作成します)。
ただし、アプリ フォルダー内で実行するとnpm install
、アップストリームのどこに存在するかに関係なく、すべてがローカルにインストールされるように見えます。これは正しい動作ですか? ( のバージョン言語が間違っているなど、別の理由がある可能性がありますpackage.json
)。これが正しい動作である場合、上記のように動作させる方法はありますかnpm install
?
各アプリ内でモジュールを広く複製することは大した問題ではありませんが、煩雑な感じがして、共通モジュールに小さな改善を加えたり、古いpackage.json
ファイルをすべて更新したりする必要がなくなります。もちろん、これは良いことかもしれません...
ベストアンサー1
ただし、アプリ フォルダー内で npm install を実行すると、アップストリームのどこに存在するかに関係なく、すべてがローカルにインストールされるように見えます。これは正しい動作ですか? (package.json のバージョン言語が間違っているなど、別の理由がある可能性があります)。これが正しい動作である場合、npm install を上記のように動作させる方法はありますか?
はい、それが npm install が行うことです。node.js コードでは、アルゴリズムrequire
はファイルシステムをたどるなど、検索する場所の特定の順序を持っています。しかし、npm install
はそれを行いません。単に所定の場所にインストールするだけです。 が使用するアルゴリズムはすべて、現在のディレクトリの下の 1 つのディレクトリだけに制限されておりnode_modules
、それより上のディレクトリには影響しません ( を除く-g
)。
各アプリ内のモジュールを広く複製することは大した問題ではありませんが、煩雑な感じがして、共通モジュールに小さな改善を加えたり、古い package.json ファイルをすべて更新したりする必要がありません。もちろん、これは良いことかもしれません...
はい、基本的にはやり方が間違っています。通常のワークフローはインターネットにうまく適応します。あなたのユースケースでは、余分な面倒な作業が発生しますが、意図したとおりにセマンティック バージョニングを使用して、"mylib": "^1.0.0"
アプリの package.json で指定し、次回に新しいバージョンを自動的に取得することもできますnpm install
。