如何在Angular-CLI库中捆绑/包含依赖项

时间:2018-11-13 20:34:40

标签: angular npm angular-material angular-cli

我在绑定依赖项时遇到问题。

我的库包是@ angular / material组件的包装。

我很惊讶地发现,在我安装的库软件包的所有地方都还要求安装@ angular / material或出现错误。

必须有一种更好的方法来做到这一点?我希望我的包装是独立的,并在安装时“包含”角/材料。

我读到将以下内容添加到库的package.json

 "bundledDependencies": [
    "@angular/material"
  ]

应该可以解决此问题,但是它似乎无法正常工作,或者至少必须执行另一步,因为在安装软件包时,我会看到此错误:

  

缺少捆绑的依赖项“ @ angular / material”。这应该是   报告给软件包维护者。

该错误确实使我听起来好像只是缺少了一些东西,并且可以按我期望的那样工作。我想念什么?

我无法找到有关该错误的任何信息。

我们想强制安装依赖项,以使我们的库保持“模块化”并自成一体。换句话说,我们只想安装我们的库并自动获取它需要的所有依赖项。

我们不想依赖来自peerDependencies的警告消息。

这似乎必须是一种可能的模式,任何人都可以解释bundledDependencies的观点

1 个答案:

答案 0 :(得分:3)

bundledDependencies用于指定要包含在软件包中的软件包。如果使用该软件包,则必须在捆绑包中提供这些软件包。它们作为软件包的一部分进行分发和安装,而不是作为独立的依赖项安装。参见:http://npm.github.io/using-pkgs-docs/package-json/types/bundleddependencies.html

一种替代方法,我认为对图书馆来说,正确的方法是使用peerDependencies(这就是我所使用的)。这使库用户可以决定是否要通过其应用程序的package.json安装那些软件包,并在安装软件包时警告“未满足的对等依赖项”,但不会安装它们。这很有用,因为它允许用户控制从属程序包的版本。 Angular Material将其需要的所有各种@angular依赖关系指定为peerDependencies(请参见https://github.com/angular/material2/blob/master/src/lib/package.json)。

如果要在安装软件包时强制安装依赖项,只需使用dependencies。我相信通常不建议在图书馆中使用此方法。