web-dev-qa-db-ja.com

依存関係@ ng-bootstrap / ng-bootstrapは明示的にホワイトリストに登録する必要があります

angular 6プロジェクトでは、angular cliコマンドng g lierary @some/libNameを使用してangularライブラリを作成しました。私のライブラリには、@ng-bootstrap/ng-bootstrapを必要とするコンポーネントがあります。 npm i --save @ng-bootstrap/ng-bootstrapで追加しました。

コマンドng build @some/libName --prodを使用してライブラリをビルドしようとすると、エラーが発生します。

Dependency @ng-bootstrap/ng-bootstrap must be explicitly whiteliste

誰かがそれを解決しましたか?

12
Aniruddha Das

更新

この警告は ng-packagrng-packagrは、すべての依存関係を"whitelistedNonPeerDependencies": []プロパティin ng-package.json。例えば:

{
  "whitelistedNonPeerDependencies": [
    "tslib",
    ...
  ]
}

元の

自分でこれに出くわしました。この警告は ng-packagr 私は思う(angle-cliはライブラリの生成とパッケージ化に依存している)。 「ホワイトリスト」が何を意味するのか正確にはわかりません。そのフレーズはng-packagrのドキュメントでは直接説明されていないようですが、 ng-packagrリポジトリのこの問題 問題を回避する方法のさまざまなオプションの。

  1. ピア(Angular、RxJSなど):このユースケースでは、サードパーティの依存関係はライブラリのpeerDependencyです。ライブラリのユーザーは、依存関係セクションにライブラリとサードパーティライブラリの両方を含める必要があります。
  2. 埋め込み(レガシーJSライブラリなど):レガシーJavaScriptライブラリ(独自のバックエンドへのアダプターなど)があり、ライブラリにレガシーコードを埋め込みたい(必要な)場合。この場合、サードパーティの依存関係はライブラリのdevDependencyであり、ライブラリのバンドルに埋め込まれます。
  3. 混合モード-埋め込みとピア(例:UXガイドライン、Angularizedスタイルガイド):このユースケースでは、サードパーティの依存関係はpeerDependencyですが、ライブラリに(部分的に)埋め込まれています。ライブラリ内のサードパーティライブラリの既存のCSS/SCSS/LESSスタイルシートを再利用して、ライブラリ内のサードパーティのコードを「埋め込む」ことができます。同時に、サードパーティの依存関係はライブラリのpeerDependencyです。

githubの問題 に詳細があります。

21
John

これをng-package.jsonに追加し、私にとってはうまくいきました

{
  "$schema": "./node_modules/ng-packagr/ng-package.schema.json",
  "lib": {
    "entryFile": "public_api.ts"
  },
  "whitelistedNonPeerDependencies": [
    "."
  ]
}
8
Zohab Ali