web-dev-qa-db-ja.com

ラーナ。ルートプロジェクトに依存関係をインストールする

次のような標準の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回ではありません)両方のサブモジュール)

5
MyTitle

だから私の質問は、なぜ一般的な依存関係をルートレベルのプロジェクトにインストールできないのですか?

あなたはそうすることができ、あなたが正しい、ノードの解決アルゴリズムは共有された依存関係をうまく見つけるでしょう。これを行うことの欠点は、柔軟性が失われることであり、展開するか、mono-repo全体を操作する必要があります。より伝統的なアプローチは、モノパッケージのルートに依存せずにパッケージを公開して個別に使用できるように、サブパッケージに本番環境の依存関係を維持することですが、これも重要ではありません。

1