根
PROJECT1
package.json {“version”:“0.0.1”}
项目2
package.json {“version”:“0.0.1”,
“dependencies”:{“project1”:“^ 0.0.1”]}
主要
package.json(“dependencies”:{“project1”:“^ 0.0.1”}
Project1,project2,projectXxxx ……和main必须一起改变.它们可能一直都在变化(如果不依赖于project1,project2等,几乎不可能在main中实现任何东西……这不是很少更改库的场景.)
你如何避免这两个陷阱:
>您可以在本地使用’npm link’.但是,每个开发人员必须以正确的顺序在所有项目中手动调用’npm link’.
新开发人员(或刚签出新开发分支的人)的工作流程是:
> cd main
> npm安装
>因为缺少project2而得到错误
> npm link ../project2
>因为缺少project1而得到错误
> cd ../project2
> npm link ../project1
> npm安装
> cd main
> npm安装
让它超过两个项目,这是疯狂的.
>或者您可以使用“预安装”脚本为您执行’npm链接'(如许多其他SO问题中所述),但实际上,您不能,因为文档告诉您不要使用预安装脚本:https://www.npmjs.org/doc/scripts.html
tl;dr Don’t use install. Use a .gyp file for compilation, and
prepublish for anything else.You should almost never have to explicitly set a preinstall or install
script. If you are doing this, please consider if there is another
option.The only valid use of install or preinstall scripts is for compilation
which must be done on the target architecture.
>或者,每次更改内容时,您都可以将每个模块发布到私有存储库.工作流程(据我所知):
>在project1中编辑文件
>凹凸版
> npm发布project1
>回到project2
> npm安装
>编辑
> npm发布project1
>回到主要
> npm安装
>编辑
>意识到你犯了一个错误并重新开始.疯狂也是.
如您所见,这些都不可接受.
那么你会改变什么来获得合理的工作流程?
你把所有东西放在同一个项目中吗? (遗憾的是,在我的情况下这是不可接受的,因为其他地方的其他项目也需要project1.)
我错过了’npm xxxxx’命令吗?
谢谢
听起来通常是轻微的麻烦正在成为您的主要问题,因为您的项目设计没有实现足够宽松的耦合.从根本上说,我认为你有一种代码味道,在某种形式或其他主要方面,project1和project2实际上仍然是一个单一的应用程序,应该是一个单独的模块,或者project1没有被正确抽象,所以它可以拆分并由MAIN2.继续重构它,在某些时候你会有一个灯泡时刻,并找到一个更清洁的组织.但是,与此同时,我确实有一个建议,应该有所帮助.当我处于类似的情况时,我们将所有帮助程序模块作为单独的项目保存在它们自己的私有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上工作时使用它
>在提交对main / package.json的更新之前进行最终测试时也使用它
> cd main&& rm -rf node_modules / project [12]将使您进入同步开发模式
>当main中的代码需要(“project1”)时,它将从本地ROOT / node_modules / project1符号链接中找到它,您可以快速编辑任何项目中的代码.无需修改版本号,推送提交或npm安装任何东西来测试更改.
>完成后,cd main&& npm install让你恢复正常模式
由于使用了符号链接,这在Windows,FYI上可能无法正常工作.
您可以在main中编写一个shell脚本,开发人员可以在第一次克隆主仓库时运行该脚本以设置此结构.