次のような標準のLerna
リポジトリがあります。
my-repo
- package.json
- packages
- api
- package.json
- web-app
- package.json
両方のパッケージで同じ依存関係が必要な場合(たとえば、lodash
)、チュートリアルの人々はそれを両方のサブモジュールにインストールしてから、bootstrap with with with lerna bootstrap --hoist
国旗。
--hoist
フラグがあるため、lodash
依存関係はルートレベルnode_modules
にのみ読み込まれますが、両方のサブモジュールには、適切なpackage.json
に依存関係として含まれます
ただし、Nodeのパッケージ解決アルゴリズムは、node_modules
フォルダを探してファイルツリーを検索します。
だから私の質問はなぜルートレベルのプロジェクトに一般的な依存関係をインストールできないのですか?次に、lodash
はルートのnode_modules
の下に配置されます。また、Nodeはファイルシステムのルートに到達するまでnode_module
を検索するため、サブモジュール(パッケージ)がそれを見つけます。
少なくとも、これは珍しいlerna bootstrap --hoist
の使用を避けるのに役立ちます。また、lodash
依存関係はトップレベルpackage.json
に1回だけ存在します(package.json
では2回ではありません)両方のサブモジュール)
だから私の質問は、なぜ一般的な依存関係をルートレベルのプロジェクトにインストールできないのですか?
あなたはそうすることができ、あなたが正しい、ノードの解決アルゴリズムは共有された依存関係をうまく見つけるでしょう。これを行うことの欠点は、柔軟性が失われることであり、展開するか、mono-repo全体を操作する必要があります。より伝統的なアプローチは、モノパッケージのルートに依存せずにパッケージを公開して個別に使用できるように、サブパッケージに本番環境の依存関係を維持することですが、これも重要ではありません。