如何使用 npm 处理 nodejs 中的本地包依赖关系



我们应该如何处理在其他本地软件包中依赖的本地软件包?

为了简单起见,假设我们有以下软件包

  • api - 快速申请
  • people - 与人打交道的一揽子计划
  • data-access - 处理数据访问的包

然后依赖关系是

  • api取决于people
  • people取决于data-access

目前,我们将这些依赖项设置为文件依赖项。

api包.json将有

"dependencies": {
  "people": "file:../people"
}
麻烦的是

,当我们对一个包进行更新并希望在依赖于它的其他包中进行这些更改时,我们发现它是一个 PITA。

我们想到的选项是:

  • npm install - 但如果进行更改,这不会覆盖以前安装的软件包,因此我们必须从node_modules目录中删除旧的软件包并重新运行 npm install...如果包依赖性很深,这可能会很糟糕。

  • npm 链接 - 我们不相信这个想法,因为它无法在版本控制中幸存下来......现在想想,也许我们有某种本地构建脚本可以为我们运行npm link命令......这样它就可以在版本控制中幸存下来。那会不会是一份繁重的工作?

  • 咕噜咕噜 - 我们还没有深入研究这个,但它感觉是一个很好的方向。谷歌搜索了一下,我们遇到了这个:https://github.com/ahutchings/grunt-install-dependencies

那么,哪种选择最适合我们的情况呢?
还有其他我们还没有想到的选择吗?

Ps. 我们

是一家在节点中做 PoC 的 .NET 商店,所以假设我们什么都不知道!

如果您坚信我们的项目设置不正确,并且我们不应该有更小的单个包,请在评论中告诉我,并附上有关该主题的一些阅读链接。

所以,我同意使用"许多小包"通常是一个好主意。 如果您还没有,请查看 12factor.net。

也就是说,在对你的问题的具体回答中,我会说你最好的选择是主要考虑你想如何维护它们。

如果"子组件"都只是应用程序的一部分(例如,数据访问所暗示的那样(,那么我会将它们保留在相同的文件夹结构中,根本不将它们映射到package.json中,而只是将它们require到您需要它们的地方。 在这种情况下,所有内容都一起版本,并且是同一 git 存储库的一部分。

如果你真的想或需要将它们全部保存在单独的 git 存储库中,那么你可以做 npm 链接,但老实说,我发现在 package.json 中使用 URL 语法更有用:

dependencies: {
  "people" : "git://path.to.git:repo@version.number"
}

然后,当您想要显式更新其中一个依赖项时,只需在 package.json 中增加版本号并再次运行npm install

最新更新