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

Node.js 如何用npm处理nodejs中的本地包依赖关系,node.js,npm,Node.js,Npm,我们应该如何处理依赖于其他本地包的本地包 为了简单起见,假设我们有以下软件包 api-express应用程序 人-与人打交道的软件包 数据访问-处理数据访问的软件包 然后,依赖关系是 api取决于人员 人员取决于数据访问 目前,我们将这些依赖项设置为文件依赖项 也就是说,apipackage.json将 "dependencies": { "people": "file:../people" } 问题是,当我们对一个包进行更新并希望其他依赖它的包进行更改时,我们发现这是一个PITA

我们应该如何处理依赖于其他本地包的本地包

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

  • api
    -express应用程序
  • -与人打交道的软件包
  • 数据访问
    -处理数据访问的软件包
然后,依赖关系是

  • api
    取决于
    人员
  • 人员
    取决于
    数据访问
目前,我们将这些依赖项设置为文件依赖项

也就是说,
api
package.json将

"dependencies": {
  "people": "file:../people"
}
问题是,当我们对一个包进行更新并希望其他依赖它的包进行更改时,我们发现这是一个PITA

我们想到的选择是:

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

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

  • 咕噜声-我们还没有深入探讨这一点,但感觉这是一个很好的方向。通过谷歌搜索,我们发现:

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

另外,我们是一个.NET商店,正在节点中进行PoC,所以假设我们什么都不知道


Pps。如果您强烈认为我们的项目设置不正确,我们不应该有更小的单独软件包,请在评论中告诉我,并提供有关该主题的阅读链接。

因此,我同意使用“许多小软件包”通常是个好主意。如果还没有,请查看12factor.net

在回答你的问题的具体答案时,我认为你最好的办法是考虑你是如何维护他们的。 如果“子组件”都只是应用程序的一部分(例如,数据访问意味着),那么我会将它们保留在相同的文件夹结构中,而不是将它们映射到package.json中,只在需要它们的地方使用它们。在本例中,所有内容都将一起发布,并且是同一git存储库的一部分

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

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

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

Ah,有趣的。。。所以你是说把它们设置为单独的包太过分了。只要保持文件夹结构,并要求他们使用其路径。。。我没想过。干杯。在很多情况下是的。如果它是可在其他应用程序中重用的东西,因此应该单独进行版本控制,那么它是有意义的。例如,如果您计划单独托管REST和SOAP api,那么让人员和数据访问模块真正独立将更有意义。将来在Node中更改这一点也不是很难,所以不要操心太多。