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

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

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

  • api – 快速应用程序
  • people – 与人打交道的一揽子计划
  • data-access – 一个处理数据访问的包

然后依赖是

  • api依赖于people
  • people依赖于data-access

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

即使api package.json会有

 "dependencies": { "people": "file:../people" } 

麻烦的是,当我们对一个软件包进行更新时,我们发现它是一个PITA,并且需要依赖于它的其他软件包中的更改。

我们想到的选项是:

  • npm install – 但是如果进行了更改,这将不会覆盖以前安装的软件包,所以我们必须从node_modules目录中删除旧的软件包,然后重新运行npm install …,如果软件包依赖性很深,那么它会变得非常糟糕。

  • npm链接 – 我们没有出售的想法,因为它不能生存的版本控制…现在想想,也许我们有一种本地构build脚本,将运行npm link命令为我们…这它可以生存版本控制。 这会是一个g job的工作吗?

  • 咕噜咕噜 – 我们还没有深入这一点,但它感觉像一个很好的方向。 有一点谷歌search我们来到这个: https : //github.com/ahutchings/grunt-install-dependencies

那么,什么样的select最适合我们的情况呢?
还有其他的select,我们还没有想到呢?

PS。 我们是一个.NET商店,在节点上做一个PoC,所以假设我们什么都不知道!

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

所以,我同意用“很多小包装”通常是一个好主意。 如果你还没有,请查看12factor.net。

这就是说,在你的问题的具体答案我会说你最好的select是主要考虑如何维护他们。

如果“子组件”只是你的应用程序的一部分(例如数据访问所暗示的),那么我会把它们放在同一个文件夹结构中, 而不是将它们映射到package.json中,而只是require它们你需要他们的地方 在这种情况下,所有的版本一起,是同一个git仓库的一部分。

如果你真的想或者需要把它们全部保存在不同的git仓库中,那么你可以做npm链接,但是说实话我发现在package.json中使用URL语法更有用:

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

然后,当你想明确地更新你的一个依赖关系时,你只需要在你的package.json中npm install版本号并再次运行npm install