5

我使用 CLI 创建并捆绑了一个 Angular (7.2.0) 库:

ng g 库 MyLibrary

ng build MyLibrary

这给了我my-libary.umd.js我需要的捆绑包。

目前,所有依赖项都作为 peerDependencies 添加到库 package.json 中。我想做的是实际将一些依赖项与库(.umd)捆绑在一起。将它们添加为“ dependencies”而不是“ peerDependencies”似乎并没有解决问题,我真的看不出有什么区别?

我怎样才能做到这一点?

应捆绑 ngx-spinner 的 package.json 示例

{
  "name": "demo-plugin",
  "version": "0.0.1",
  "peerDependencies": {
    "@angular/common": "^7.1.0",
    "@angular/core": "^7.1.0"
  },
  "dependecies": {
    "ngx-spinner": "^7.1.4"
  },
  "bundledDependencies": [
    "ngx-spinner"
  ]
}
4

2 回答 2

8

您想要的是将其添加到bundledDependencies

dependencies:当其他人使用您的库时,NPM 会自动安装它们。此处列出的依赖项也需要在 ng-package.json 中列入白名单(“whitelistedNonPeerDependencies”)

peerDependencies:您的库的用户必须安装依赖项(将其添加到他自己的 package.json 中)

bundledDependencies:在构建它时,依赖项将与您的库捆绑在一起。这还将捆绑所有传递依赖项。如果要停止此链,则需要添加不应捆绑到peerDependencies. 因此,例如,如果您想捆绑依赖于 B 的依赖项 A,您会得到一个包含 A 和 B 的捆绑包。如果您不想捆绑 B,则将其添加到peerDependencies.

您拥有的每个依赖项只能同时出现在其中一个中。因此,要捆绑依赖项,您需要将此依赖项添加到根的 package.json(而不是 library-package.json)。你不应该做的是npm install在库文件夹中运行。如果您npm install在 library 文件夹中进行操作并且在根 package.json 中没有捆绑的依赖项(因此根 node_modules 文件夹中缺少它),您将获得成功的构建,但依赖项不会包含在构建中( cli 应该可能会暗示这一点..)。

长话短说,针对您的具体问题:

  1. 从 library-package.json 的“dependencies”部分中删除“ngx-spinner”
  2. 删除库中的 node_modules 文件夹(如果有的话)
  3. 将“ngx-spinner”作为依赖项添加到您的 root-package.json
  4. 构建库
于 2019-05-17T13:42:39.343 回答
1

我认为您正在寻找的是:https ://github.com/ng-packagr/ng-packagr/blob/HEAD/docs/dependencies.md#whitelisting-the-dependencies-section

白名单NonPeerDependencies

于 2019-02-20T09:08:42.753 回答