Angular6 在angular 6库项目中使用依赖npm包的正确方法是什么?

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.

对于如何在我的库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.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”:[“]
想知道是否有更好的方法的好问题?请参阅此处的讨论,了解相同的错误。您链接到的答案是为什么应该使用对等依赖关系的经典案例;另一个框架的插件需要确保它使用的是同一个对象,因此它使用的是主机的版本,而不是私有版本。考虑删除这个链接或添加额外的信息,因为它不适用于被问到的问题:我的库使用其他库,不想强迫用户自己下载所有的依赖项,或者想确保我使用正确的版本,即使用户正在使用另一个版本。很好的漫无边际:)很好的发现!很确定你找到的这条评论就是原因。干杯