如何正确设置 npm 依赖项?

how to set the npm dependencies correctly?

我想将我的 Angular 模块贡献给 npm,我做到了。但我仍然对如何正确设置 npm 依赖感到困惑。

Angular 模块依赖 @angular/cdk @angular/material @angular/core he。我注意到 angular-cli 已自动在 peerDependencies 属性 中设置 @angular/core @angular/common。我认为 @angular/cdk 等与 @angular/core 相同,所以我也在 peerDependencies 中添加了 @angular/cdk @angular/material @angular/core。但是 angular-cli 警告我 'Cannot find module @angular/material' 当我创建一个新项目并将这个模块引入项目时。最后,我通过在 dependencies 属性 中添加 @angular/cdk @angular/material @angular/core he 来解决问题。但我仍然对为什么它应该添加到 dependencies 而不是 peerDependencies 感到困惑。此外,我应该将它添加到 dependencies 还是只是提示它在 README.md 中,让其他开发人员自己将依赖项引入到项目中。

Project Github Address

我建议在谷歌上搜索依赖项和对等依赖项之间的区别以获取更多详细信息,但其要点是对等依赖项是您希望库的使用者必须与您的包分开安装的那些,但这是必需的为您的包裹寄到 运行.

一般来说,最好的做法是尽可能将依赖项定义为对等依赖项,这对您来说完全有意义。为什么,你可能会问?好吧,如果您将 angular material cdk 的一个版本定义为依赖项,并且消费者已经在他们的项目中安装了 angular material cdk,您现在将拥有同一个库的两个版本,它们可能相互冲突.

相比之下,当您定义对等依赖时,您说的是 "hey, this library won't work unless you have material cdk installed, and I'll use whatever version that is"。这要好得多,因为他们不必安装两次或担心不同版本的冲突。

你列出的所有内容都应该在 peerDependencies 中,我唯一要放在依赖项中的是你的库的核心内容,你不希望消费者开发人员已经在他们的项目中安装了这些内容。由于他们使用的似乎是 material 项目的插件,因此这样做很有意义。尽管现在我访问了您的存储库,但我没有看到任何提及 material UI。您确实希望在您的图书馆所需的对等依赖项中非常明确。