Nodejs:多个项目工作stream程

假设你有这个设置:

root project1 package.json { "version" : "0.0.1" } project2 package.json { "version" : "0.0.1", "dependencies" : { "project1" : "^0.0.1"] } main package.json ("dependencies" : { "project1" : "^0.0.1" }

Project1,project2,projectXxxx …和main必须一起改变。 它们都可能一直 都在变化 (几乎不可能在没有依赖项目1,项目2等的情况下实现任何东西)这不是一个很less更改的库的情况。

你如何避免这两个陷阱:

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

    • CD主
    • npm安装
    • 得到一个错误,因为project2丢失
    • npm链接../project2
    • 得到一个错误,因为project1丢失
    • cd ../project2
    • npm链接../project1
    • npm安装
    • CD主
    • npm安装

让它超过两个项目,这是疯狂的。

  • 或者您可以使用“预安装”脚本来为您执行“npm链接”(正如许多其他SO问题所build议的),但实际上,您不能,因为文档告诉您不要使用预安装脚本: https:/ /www.npmjs.org/doc/scripts.html

tl; dr不要使用安装。 使用.gyp文件进行编译,并预先发布其他任何内容。

您几乎不需要明确设置预安装或安装脚本。 如果你正在这样做,请考虑是否有其他select。

安装或预安装脚本的唯一有效用途是编译,必须在目标架构上完成。

  • 或者,您可以将每个模块发布到一个私有存储库,每次你改变一些东西。 工作stream程(据我所知):

    • 编辑project1中的文件
    • 凹凸版本
    • npm发布project1
    • 回到project2
    • npm安装
    • 编辑
    • npm发布project1
    • 回到主要
    • npm安装
    • 编辑
    • 意识到你犯了一个错误,并重新开始。 疯狂也是。

正如你所看到的,没有一个是可以接受的。

那么你会改变什么来获得一个合理的工作stream程?

你把所有的东西放在同一个项目中吗? (可悲的是,对我来说这是不可接受的,因为别的项目也会需要project1。)

我错过了一个'npm xxxxx'命令吗?

谢谢

这听起来像什么通常是轻微的滋扰正在成为你的主要问题,因为你的项目devise还没有实现松耦合。 基本上,我认为你有一种代码味道,在某种forms或另一种主要的,project1和project2实际上仍然是一个单一的应用程序,应该是一个单一的模块,或project1不是正确的抽象,因此可以拆分和使用MAIN2。 继续重构它,并在某个时刻,你会有一个灯泡的时刻,并find一个更清洁的组织。

不过,同时,我也有一个build议,对你有所帮助。 当我处于类似的情况时,我们把所有的helper模块作为单独的项目放在他们自己的私有github仓库中,当一个新的开发者克隆了main时,我们有一个shell脚本来设置下面的结构,其中的关键是node_modules一个比正常高的目录:

 ROOT main project1 project2 node_modules project1 (symlink to ../project1) project2 {symlink to ../project2) 

这允许两种开发模式:

  • cd main && npm install会让你进入正常模式,并且会像往常一样在ROOT/main/node_modules/project1安装兄弟项目
    • 当主要工作时使用这个
    • 在提交main/package.json更新之前进行最终testing时也要使用它
  • cd main && rm -rf node_modules/project[12]会使您处于同步开发模式
    • main中的代码require("project1")它会从本地ROOT/node_modules/project1符号链接中find它,并且可以在任何项目中快速编辑代码。 无需缓冲版本号,推送提交,或npm安装任何东西来testing更改。
    • 完成后, cd main && npm install会让你回到正常模式

由于使用符号链接,这可能不适用于Windows,FYI。

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