Angular 库包依赖项
Angular library bundle dependencies
我使用 CLI 创建并捆绑了一个 Angular (7.2.0) 库:
ng g library MyLibrary
ng build MyLibrary
这为我提供了我需要的 my-libary.umd.js
包。
目前,所有依赖项都作为 peerDependencies 添加到库 package.json 中。我想做的是实际将一些依赖项与库 (.umd) 捆绑在一起。将它们添加为“dependencies
”而不是“peerDependencies
”似乎并不能解决问题,我真的不明白有什么区别?
我该怎么做?
package.json 应捆绑 ngx-spinner 的示例
{
"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"
]
}
whitelistedNonPeerDependencies
你要的是加到bundledDependencies
:
dependencies
:当其他人使用您的库时,NPM 会自动安装它们。此处列出的依赖项也需要在 ng-package.json ("whitelistedNonPeerDependencies")
中列入白名单
peerDependencies
:你的库的用户必须安装依赖(添加到他自己的package.json)
bundledDependencies
:依赖项将在构建时与您的库捆绑在一起。这还将捆绑所有传递依赖项。如果你想停止这条链,你需要添加不应该被捆绑的依赖到peerDependencies
。因此,例如,如果你想捆绑依赖 A,它依赖于 B,你会得到一个包含 A 和 B 的捆绑包。如果你不想捆绑 B,你将它添加到 peerDependencies
.
您拥有的每个依赖项只能同时出现在其中一个中。因此,要捆绑依赖项,您需要将此依赖项添加到根目录的 package.json(而不是 library-package.json)。你不应该做的是在库文件夹中 运行 npm install
。如果您在库文件夹中执行 npm install
并且在根目录 package.json 中没有捆绑的依赖项(因此根目录 node_modules 文件夹中缺少它),您将获得成功的构建,但依赖项不会包含在构建中(cli 应该可能会提示这一点 ..)。
长话短说,针对您的具体问题:
- 从 library-package 的 "dependencies" 部分删除 "ngx-spinner"。json
- 删除库中的 node_modules 文件夹(如果那里有)
- 将 "ngx-spinner" 添加为 root-package 的依赖项。json
- 构建库
我使用 CLI 创建并捆绑了一个 Angular (7.2.0) 库:
ng g library MyLibrary
ng build MyLibrary
这为我提供了我需要的 my-libary.umd.js
包。
目前,所有依赖项都作为 peerDependencies 添加到库 package.json 中。我想做的是实际将一些依赖项与库 (.umd) 捆绑在一起。将它们添加为“dependencies
”而不是“peerDependencies
”似乎并不能解决问题,我真的不明白有什么区别?
我该怎么做?
package.json 应捆绑 ngx-spinner 的示例
{
"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"
]
}
whitelistedNonPeerDependencies
你要的是加到bundledDependencies
:
dependencies
:当其他人使用您的库时,NPM 会自动安装它们。此处列出的依赖项也需要在 ng-package.json ("whitelistedNonPeerDependencies")
peerDependencies
:你的库的用户必须安装依赖(添加到他自己的package.json)
bundledDependencies
:依赖项将在构建时与您的库捆绑在一起。这还将捆绑所有传递依赖项。如果你想停止这条链,你需要添加不应该被捆绑的依赖到peerDependencies
。因此,例如,如果你想捆绑依赖 A,它依赖于 B,你会得到一个包含 A 和 B 的捆绑包。如果你不想捆绑 B,你将它添加到 peerDependencies
.
您拥有的每个依赖项只能同时出现在其中一个中。因此,要捆绑依赖项,您需要将此依赖项添加到根目录的 package.json(而不是 library-package.json)。你不应该做的是在库文件夹中 运行 npm install
。如果您在库文件夹中执行 npm install
并且在根目录 package.json 中没有捆绑的依赖项(因此根目录 node_modules 文件夹中缺少它),您将获得成功的构建,但依赖项不会包含在构建中(cli 应该可能会提示这一点 ..)。
长话短说,针对您的具体问题:
- 从 library-package 的 "dependencies" 部分删除 "ngx-spinner"。json
- 删除库中的 node_modules 文件夹(如果那里有)
- 将 "ngx-spinner" 添加为 root-package 的依赖项。json
- 构建库