如何正确设置npm依赖项?

时间:2019-02-16 17:01:49

标签: angular npm material

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

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

Project Github Address

1 个答案:

答案 0 :(得分:0)

我建议仔细检查依赖性和对等依赖性之间的区别以获取更多信息,但要点是对等依赖性是您希望库的使用者必须与软件包独立安装的对等依赖性,但这对于您的软件包是必需的包运行。

通常,最佳实践是在可能的情况下将依赖关系定义为对等依赖关系,对您而言完全有意义。为什么,你可能会问?好吧,如果您将角物料cdk的版本定义为依赖项,并且使用者已经在他们的项目中安装了角物料cdk,那么您现在将拥有同一库的两个版本,这两个版本可能彼此冲突。

相反,当您定义对等依赖项时,您是在说:“嘿,除非您安装了实质性的cdk,否则该库将不起作用,而我将使用任何版本。”这样会更好,因为他们不必安装两次,也不必担心不同版本的冲突。

您列出的所有内容都应放在peerDependencies中,只有我要依赖的内容是库核心的内容,您不希望消费者开发人员已经在其项目中安装了这些内容。由于他们使用的似乎是材料项目的插件,因此这样做是有意义的。尽管现在我访问了您的存储库,但没有看到任何有关实质性用户界面的信息。您确实希望对您的库所需的对等依赖项非常明确。