JBo*_*hUA 2 npm angular-material angular-cli angular
我在捆绑依赖项时遇到问题。
我的库包是 @angular/material 组件的包装器。
我很惊讶地发现在我安装库包的任何地方都要求安装 @angular/material 或者我得到一个错误。
必须有更好的方法来做到这一点吗?我希望我的包是独立的,并且在安装时“包含”角度/材料。
我读到将以下内容添加到库的 package.json
"bundledDependencies": [
"@angular/material"
]
Run Code Online (Sandbox Code Playgroud)
应该解决这个问题,但它似乎没有用,或者至少必须有另一个步骤,因为然后我在安装我的包时看到这个错误:
缺少捆绑的依赖项“@angular/material”。这应该报告给包维护者。
这个错误确实让我听起来好像我只是错过了一些东西,这将按我的预期工作。我错过了什么?
我无法找到有关该错误的任何信息。
我们想强制安装依赖项以保持我们的库“模块化”和自包含。换句话说,我们只想安装我们的库并自动获取它需要的所有依赖项。
我们不想依赖来自 peerDependencies 的警告消息。
似乎这必须是一种可能的模式,任何人都可以解释 bundledDependencies 的观点
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
. 我相信这通常不推荐用于图书馆。