Angular6 在angular 6库项目中使用依赖npm包的正确方法是什么?
对于如何在我的库angular6项目中引用外部npm包,我有点困惑。我们有一个内部scss库,我想用它来设计库中可重用组件的样式。我该如何导入它 lib项目的package.json:Angular6 在angular 6库项目中使用依赖npm包的正确方法是什么?,angular6,angular-library,Angular6,Angular Library,对于如何在我的库angular6项目中引用外部npm包,我有点困惑。我们有一个内部scss库,我想用它来设计库中可重用组件的样式。我该如何导入它 lib项目的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.
{
"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.
将包名添加到ng-package.json文件中的“whitelistedNonPeerDependencies”集合中似乎可以解决此生成问题。但我仍然不确定这里的最佳实践是什么。我们应该创建依赖于其他npm包的angular库,还是最好只使用PeerDependence 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"
]
}
{
.....
"whitelistedNonPeerDependencies": [
"angular" // it matches using regular expression
]
}
you can completely suppress this using below approach
{
.....
"whitelistedNonPeerDependencies": [
"."
]
}
这与其说是一个官方答案,不如说是一个猜测/漫谈,但以下是我从迄今为止的发现和思考中收集到的信息 : //验证非对等依赖项,因为它们很容易导致应用程序的node_modules文件夹中的重复安装或版本冲突 因此,我认为他们关心的是这样一种情况,即库本身依赖于一个版本,而使用该库的应用程序可能使用另一个版本 在版本中使用
^
是安装依赖项的默认配置,在版本号中使用^
将消除因次要版本或修补程序版本而异的依赖项。所以我认为主要关注的是主要版本
从应用程序的节点\u模块的角度来看,有几个示例
:
- 应用程序:
,库:^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
您可以在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"
]
}
{
.....
"whitelistedNonPeerDependencies": [
"angular" // it matches using regular expression
]
}
you can completely suppress this using below approach
{
.....
"whitelistedNonPeerDependencies": [
"."
]
}
我希望你的问题有一个明确的答案。在输出中有一个严厉的警告,但却不解释为什么会出现在任何地方,这是非常令人恼火的。想知道在package.json中,您是否可以执行依赖项的npm安装,而不是将其添加到lib中,以便在构建过程中安装它?你能做到这一点吗。如果已安装依赖项,则不会发生冲突,这样会更好吗?如果要忽略此机制,可以使用
“whitelistedNonPeerDependencies”:[“]
想知道是否有更好的方法的好问题?请参阅此处的讨论,了解相同的错误。您链接到的答案是为什么应该使用对等依赖关系的经典案例;另一个框架的插件需要确保它使用的是同一个对象,因此它使用的是主机的版本,而不是私有版本。考虑删除这个链接或添加额外的信息,因为它不适用于被问到的问题:我的库使用其他库,不想强迫用户自己下载所有的依赖项,或者想确保我使用正确的版本,即使用户正在使用另一个版本。很好的漫无边际:)很好的发现!很确定你找到的这条评论就是原因。干杯