对于我应该如何引用我的库angular6项目中的外部npm软件包,我有些困惑。我们有一个内部的scss库,可以用来在库中设置可重用组件的样式。我该如何导入呢?
package项目的package.json:
{
"name": "ikr-lib",
"version": "0.0.1",
"peerDependencies": {
"@angular/common": "^6.0.0-rc.0 || ^6.0.0",
"@angular/core": "^6.0.0-rc.0 || ^6.0.0",
"document-register-element": "1.8.1"
},
"dependencies": {
"element.ui": "^1.0.1"
}
}
在构建库项目时,我得到以下信息:
Distributing npm packages with 'dependencies' is not recommended. Please consider adding element.ui to 'peerDependencies' or remove it from 'dependencies'.
BUILD ERROR
Dependency element.ui must be explicitly whitelisted.
答案 0 :(得分:5)
在ng-package.json文件的“ whitelistedNonPeerDependencies”集合中添加软件包名称似乎可以解决此生成问题。我仍然不确定最佳做法是什么。我们是否应该创建依赖于其他npm软件包的角度库,还是最好仅具有peerDependancies?
ng-package.json文件:
{
"$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
"dest": "../../dist/ikr-lib",
"deleteDestPath": false,
"lib": {
"entryFile": "src/public_api.ts"
},
"whitelistedNonPeerDependencies": [
"element.ui"
]
}
答案 1 :(得分:1)
这比官方的答案更像是猜测/漫步,但这是我从到目前为止的发现和思考中收集的信息。
The source code gives a clue about their reasoning:
//验证非对等依赖项,因为它们很容易导致应用程序的node_modules文件夹中的重复安装或版本冲突
因此,我认为他们担心的情况是,库本身具有一个版本的依赖关系,而使用该库的应用程序可能会使用其另一个版本。
在版本中使用^
是安装依赖项的默认配置。此外,在版本号中使用^
将重复删除因次要或补丁版本而异的依赖项。所以我认为主要关注点是主要版本。
从应用程序node_modules
的角度来看一些示例:
^2.8.3
,库:^2.8.0
=>重复数据删除(2.8.3
)^2.9.0
,库:^2.3.4
=>重复数据删除(2.9.0
)^3.0.1
,库:^2.3.4
=>重复(存在3.0.1
和2.3.4
)这可能会夸大应用程序的大小,或在工具尝试作为依赖项加载哪个版本方面引起冲突。
This answer also talks a little bit about why to use peerDependencies
instead.
答案 2 :(得分:0)
您可以在ng-package.json文件中使用以下方式将其列入白名单:
{
.....
"whitelistedNonPeerDependencies": [
"angular" // it matches using regular expression
]
}
you can completely suppress this using below approach
{
.....
"whitelistedNonPeerDependencies": [
"."
]
}