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

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 的观点

G. *_*ter 8

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. 我相信这通常不推荐用于图书馆。

  • 强制安装 == '依赖'; 提供 == 'bundledDependencies'(见链接 - 就我所知);require install == 'peerDependencies' - 这真的是你想要的。不幸的是,您不能“强制”对等依赖项(但应用程序将无法运行),因此您必须使用“依赖项”来强制安装。但正如我所说,图书馆通常不是这样做的。警告和您的库文档旨在强制执行依赖项要求。 (2认同)
  • 对于任何其他读者,您说得非常正确,您的最后一句话对我帮助最大。我在外部应用程序 package.json 中有依赖项,但不在具有对等依赖项的 LIBRARY 较小的 package.json 中。我从未在该文件中看到常规依赖项,正如您所说,这可能不是正常模式,但这正是我们正在寻找的。所以在 LIBRARY 的 package.json 中你可以添加常规的依赖项!!太感谢了!!!!! (2认同)