7

シナリオ

  • 私は使っている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"、両方ProjectAProjectBほとんどのように参照されます。

私が試したこと

npm リンク

npm リンクを使用すると、同じ (上記を参照) 動作が表示されます。フォルダ全体がProjectAの node_modules にインストールされます。

npm パック

私が実際にファイルを持っていることが重要かもしれません. そのため、ファイルを使用すると生成されます。その後、すべてを介してインストールすると、正常に動作します。-file を考慮に入れていると思います。.npmignoreProjectBnpm packprojectB.tgzProjectB"projectB": "file:../projectB.tgz"npm pack.npmignore

このソリューションに関する私の問題はProjectB、変更が適用されるたびにビルドする必要があるだけでなく、それもビルドする必要があるnpm packことです。

ProjectBの node_modulesを削除

これは最もばかげた回避策だと思います。ProjectBvia を再度参照し"projectB": "file:../projectB"、ビルド後に node_modules を削除すると、インストール後に表示されません。したがって、これ以上例外は発生しません。

ProjectB-folder全体がまだインストールされているため、これは有効な解決策ではないと思います。

質問

ここでのベストプラクティスは何ですか? ローカルソースからインストールするための合理的なコンスタレーションは何ProjectAですか?ProjectBProjectB

4

3 に答える 3

0

projectB の package.json ファイルに次のコードを入れてみてはいかがでしょうか?

"files": [
    "lib/*"
]

これにより、配列で指定されたファイルのみを使用するようにnpmインストールに指示する必要があります。明らかに、より多くのエントリでこれらを拡張できます。詳細については、ドキュメントを参照してください

于 2018-06-27T15:12:02.803 に答える