Node.js Nodejs:多项目工作流

Node.js Nodejs:多项目工作流,node.js,Node.js,假设您有以下设置: 根目录 项目1 package.json{“版本”:“0.0.1”} 项目2 package.json{“version”:“0.0.1”, “依赖项”:{“project1”:“^0.0.1”]} 主要的 package.json(“依赖项”:{“project1”:“^0.0.1”} Project1、project2、projectXxxx…和main必须一起更改。它们可能一直都在更改(如果不依赖Project1、project2等,很难在main中实现任何内容。这不

假设您有以下设置:

根目录
项目1
package.json{“版本”:“0.0.1”}
项目2
package.json{“version”:“0.0.1”,
“依赖项”:{“project1”:“^0.0.1”]}
主要的
package.json(“依赖项”:{“project1”:“^0.0.1”}

Project1、project2、projectXxxx…和main必须一起更改。它们可能一直都在更改(如果不依赖Project1、project2等,很难在main中实现任何内容。这不是很少更改的库的情况。)

如何避免这两个陷阱:

  • 您可以在本地使用“npm链接”。但是,每个开发人员都必须在所有项目中以正确的顺序手动调用“npm链接”。 新开发人员(或刚签出新开发分支的人员)的工作流程为:

    • 光盘主机
    • npm安装
    • 获取错误,因为缺少project2
    • npm链接../project2
    • 获取错误,因为缺少project1
    • cd../project2
    • npm链接../project1
    • npm安装
    • 光盘主机
    • npm安装
让它超过两个项目,这是疯狂的

  • 或者您可以使用“预安装”脚本为您执行“npm链接”(如许多其他SO问题中所建议的),但实际上,您不能,因为文档告诉您不要使用预安装脚本:
dr不使用install。使用.gyp文件进行编译,然后 为其他内容预发布

您几乎不必显式地设置预安装或安装 脚本。如果你这样做,请考虑是否存在另一个。 选择权

安装或预安装脚本的唯一有效用途是编译 这必须在目标体系结构上完成

  • 或者,每次更改某些内容时,您都可以将每个模块发布到专用存储库中。工作流是(据我所知):

    • 在project1中编辑文件
    • 凹凸版
    • npm发布项目1
    • 返回项目2
    • npm安装
    • 编辑
    • npm发布项目1
    • 回到主站
    • npm安装
    • 编辑
    • 意识到你犯了一个错误,重新开始。也是疯狂
正如你所看到的,这些都是不可接受的

那么,为了获得合理的工作流程,您会做哪些更改

您是否将所有内容都放在同一个项目中?(遗憾的是,在我的情况下,这是不可接受的,因为其他地方的其他项目也需要project1。)

我是否缺少执行此操作的“npm xxxxx”命令


谢谢

这听起来像是一般的小干扰正在成为您的主要问题,因为您的项目设计没有实现足够的松散耦合。从根本上说,我认为您有一种代码味道,在某种形式上,project1和project2仍然是一个单一的应用程序,应该是一个单一的模块,或者project1没有被正确地抽象,所以它可以被分离出来并由main2使用。继续重构它,在某个时候你会有一个新的机会,找到一个更干净的组织

然而,与此同时,我有一个建议应该会对你有所帮助。当我处于类似的情况时,我们将所有助手模块作为单独的项目保留在他们自己的私有github repos中,当新开发人员克隆main时,我们有一个shell脚本来设置以下结构,其关键是
节点\ u模块
比正常目录高一个目录:

ROOT
  main
  project1
  project2
  node_modules
    project1 (symlink to ../project1)
    project2 {symlink to ../project2)
这允许两种开发模式:

  • cd-main&&npm-install
    将使您处于正常模式,并将在
    ROOT/main/node\u模块/project1
    中正常安装同级项目
    • 在主要处理main时使用此选项
    • 在将更新提交到
      main/package.json
  • cd-main和&rm-rf节点\u模块/项目[12]
    将使您处于同步开发模式
    • main
      中的代码确实
      需要(“项目1”)
      时,它将从本地
      根/节点\u模块/project1
      符号链接中找到它,您可以快速编辑任何项目中的代码。无需更改版本号、推送提交或npm安装任何内容来测试更改
    • 完成后,
      cd-main&&npm-install
      会让您回到正常模式
由于使用符号链接,这可能无法在Windows上正常工作,仅供参考


您可以在
main
中编写一个shell脚本,您的开发人员可以在第一次克隆
main
repo时运行该脚本来设置此结构。

我接受“重构”建议,但我担心如果我将其拆分得更多,我会遇到更多这样的“projectX依赖于projectY”问题。它甚至还没有变得混乱:我只有一个项目(project2)我需要在main1和main2之间共享。我已经将它拆分为不同的关注点,因此依赖于project1-我已经无法理解事情了!而且在很大程度上,project2只是收集main1和main2必须提供的文件。甚至没有一点逻辑;它只是像一个共享文件夹一样-不是吗它一直都在编辑…至于您的脚本,node如何知道main旁边的“node_modules”文件夹包含“main”的依赖项?这是标准的吗?无论如何,谢谢!是的,这是节点的
require
函数使用的标准搜索算法。如果需要,它会在文件系统中一直查找到根目录。此外,我们至少可以同意“使用shell脚本”吗这是npm严重失败的迹象吗?还是这种设置很不常见?那么到底什么是不常见的:“main1”和“main2”依赖于一个共享库“项目”?库更改太频繁?库本身依赖于另一个库?我会怎么做