Angular 10 のアップグレード - CommonJS または AMD の依存関係を修正すると最適化が失敗する可能性がある 質問する

Angular 10 のアップグレード - CommonJS または AMD の依存関係を修正すると最適化が失敗する可能性がある 質問する

Angular 9アプリをAngular 10バージョンにアップグレードしようとしていますが、アップグレード後に以下の警告が表示されます

WARNING in calendar.reducer.ts depends on lodash/keys. CommonJS or AMD dependencies can cause optimization bailouts.

ファイルに以下の行を追加しましたangular.jsonが、問題は解決されませんでした

"allowedCommonJsDependencies": ["lodash"]

上記の問題をどのように修正すればよいでしょうか。

ベストアンサー1

npmパッケージlodash自体はECMAScriptモジュールではないため、警告が表示されます。その結果、コンパイラが実行できないため、バンドルサイズが大幅に増加する可能性があります。木を揺らす警告を取り除く方法は次のとおりです。

ESモジュール化ライブラリに置き換える(推奨)

いくつかのライブラリはESモジュール化ビルドを提供しています。 の場合はlodash、次のように置き換えることができます。ロダッシュ

走るnpm install --save lodash-es

lodashここで、からのすべてのインポートを に置き換えますlodash-es。また、 ES インポート ステートメントを使用してライブラリをインポートするようにしてください。

import { keys } from 'lodash-es';

これにより、コンパイラはパッケージから未使用のシンボルを最適化できるようになります。

CommonJS 依存関係をホワイトリストに登録する

ライブラリに ES モジュール化ビルドがない場合、または何らかの理由で気にしない場合は、ファイル内の特定の CommonJS 依存関係を許可できますangular.json(これにより、アプリケーションのバンドル サイズが大幅に増加する可能性があります)。

"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": {
      "allowedCommonJsDependencies": ["lodash"]
    }
  }
}

Angular CLI バージョン 10.0.1 以降では、 で glob を使用できますallowedCommonJsDependencies。つまり、 を渡すとlodash、サブパス (例lodash/keys) も許可されます。

ドキュメント参照:https://angular.dev/tools/cli/build#configuring-commonjs-dependencies

おすすめ記事