我在绑定依赖项时遇到问题。
我的库包是@ angular / material组件的包装。
我很惊讶地发现,在我安装的库软件包的所有地方都还要求安装@ angular / material或出现错误。
必须有一种更好的方法来做到这一点?我希望我的包装是独立的,并在安装时“包含”角/材料。
我读到将以下内容添加到库的package.json
"bundledDependencies": [
"@angular/material"
]
应该可以解决此问题,但是它似乎无法正常工作,或者至少必须执行另一步,因为在安装软件包时,我会看到此错误:
缺少捆绑的依赖项“ @ angular / material”。这应该是 报告给软件包维护者。
该错误确实使我听起来好像只是缺少了一些东西,并且可以按我期望的那样工作。我想念什么?
我无法找到有关该错误的任何信息。
我们想强制安装依赖项,以使我们的库保持“模块化”并自成一体。换句话说,我们只想安装我们的库并自动获取它需要的所有依赖项。
我们不想依赖来自peerDependencies的警告消息。
这似乎必须是一种可能的模式,任何人都可以解释bundledDependencies的观点
答案 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
。我相信通常不建议在图书馆中使用此方法。