シナリオ
- 私は使っている
npm 5.8.0
- 私はとを持ってい
ProjectA
ますProjectB
ProjectB
の依存関係ですProjectA
- 両方のプロジェクトがバンドルされ、Webpack 経由で実行されます (必要に応じて構成を提供できます)。
開発目的で、の package.json を 経由で参照ProjectB
しています。基本的に必要なファイルは、Webpack の出力であるフォルダーにあるだけです。ProjectA
"projectB": "file:../projectB"
lib
問題
上記の構成でこの依存関係をインストールすると、npm は -folder 全体ProjectB
を node_modules にインストールします。すべてprojectB
の node_modules、構成ファイル、src-folder などが含まれます。
これが期待される動作ではないという事実は別として、これはエラーにつながります。たとえば、インストールされた @types の一部は、重複していると見なされるため、エラーをスローします。ProjectA
と からの@types と他のパッケージはProjectB
「衝突」しているようです。これらのパッケージは"dependencies"
、両方ProjectA
とProjectB
ほとんどのように参照されます。
私が試したこと
npm リンク
npm リンクを使用すると、同じ (上記を参照) 動作が表示されます。フォルダ全体がProjectA
の node_modules にインストールされます。
npm パック
私が実際にファイルを持っていることが重要かもしれません. そのため、ファイルを使用すると生成されます。その後、すべてを介してインストールすると、正常に動作します。-file を考慮に入れていると思います。.npmignore
ProjectB
npm pack
projectB.tgz
ProjectB
"projectB": "file:../projectB.tgz"
npm pack
.npmignore
このソリューションに関する私の問題はProjectB
、変更が適用されるたびにビルドする必要があるだけでなく、それもビルドする必要があるnpm pack
ことです。
ProjectB
の node_modulesを削除
これは最もばかげた回避策だと思います。ProjectB
via を再度参照し"projectB": "file:../projectB"
、ビルド後に node_modules を削除すると、インストール後に表示されません。したがって、これ以上例外は発生しません。
ProjectB
-folder全体がまだインストールされているため、これは有効な解決策ではないと思います。
質問
ここでのベストプラクティスは何ですか? ローカルソースからインストールするための合理的なコンスタレーションは何ProjectA
ですか?ProjectB
ProjectB