当前位置: 首页 > 知识库问答 >
问题:

前端多人团队协作开发,多项目有公共模块,应该采用什么方案?

夏骞尧
2023-10-28

关于团队开发多个项目并存在模块共用这个问题,找了不少的解决方法,如

  • git subtree
  • monorepo
  • npm 包
  • ...

但有个问题,就是构建。


项目代码目前是放在阿里云效上面,每个项目都是独立的仓库,公共模块在每个项目都有一份,在流水线构建时只需指定库就行。

而当要抽离公共模块,想要采用的方案是 monorepo,多人对同一个库进行开发,构建是否可以直接通过指令编译?
如果出现需要进行版本回退的情况,对其他项目的影响应该如何处理?

共有1个答案

卢骏俊
2023-10-28

对于前端多人团队协作开发,多项目有公共模块的情况,可以采用以下方案:

  1. Git Submodule: Git Submodule可以将一个仓库的代码嵌套到另一个仓库中,作为子模块。团队可以共同维护一个公共模块的仓库,其他项目将其作为子模块进行嵌套。这样可以确保公共模块的代码与各个项目解耦,同时可以避免重复提交。
  2. npm 包: 将公共模块打包成npm包,并在其他项目中通过npm依赖的方式引入。这样可以实现代码复用,同时确保版本控制的一致性。团队可以共同维护这个npm包,并使用版本控制工具进行管理。
  3. Monorepo: Monorepo是一种将多个项目放在一个仓库中进行管理的模式。团队可以建立一个公共的monorepo,并在其中维护公共模块的代码。其他项目可以通过Yarn或者npm的workspace功能引入monorepo中的模块。Monorepo的构建可以通过CI/CD工具进行自动化,确保公共模块的代码变更能够及时推送到其他项目中。

对于构建问题,团队可以选择使用Webpack或者Rollup等构建工具进行打包。在构建过程中,团队可以编写相应的插件或者脚本,将公共模块的代码编译到各个项目中。如果出现需要回退版本的情况,团队可以通过版本控制工具进行相应的操作,并重新构建各个项目。这样可以确保对其他项目的影响最小化。同时,团队也可以考虑使用CI/CD工具进行自动化构建和部署,提高团队协作的效率。

 类似资料:
  • 我继承了一个具有以下设置的项目。Gradle中大约有5个单独的模块,分别位于5个不同的git存储库中。这些模块的版本控制是由ScmVersion插件驱动的。其中一个模块是一个将这些模块集成在一起的应用程序。 模块之间的依赖关系在build.gradle dependency部分中由groupId、artificatId和version指定。 我对Gradle很陌生。到目前为止,我已经创建了一个简单

  • 问题内容: 有什么方法可以在Maven中的父项目的模块之间共享资源?例如,我想为一个多模块Maven项目中的所有模块指定一个log4j.properties文件。 通常,我使用Eclipse IDE通过选择常规项目来创建父项目,然后通过指定的包装将其转换为Maven项目。这将创建一个没有and等文件夹的“干净”项目结构。我不知道在这种情况下应该在哪里放置这样的共享资源。 EDIT1 :我想将公共资

  • 我们有一个小团队,需要在一个阿列克谢技能上合作。然而,交互模型仅存在于单个用户帐户下。其他人无权编辑模型。有人解决过这个问题吗?

  • 我是新来的,并尝试在Maven多模块项目中使用它。我的项目结构如下: 应用程序模块执行具有构建目标的quarkus maven插件。包含一个简单的rest控制器,因此也包含一个在中。RESTAPI模块由应用程序模块引用。 如果我使用打包整个项目,那么生成的runner jar将按预期工作。但是,如果我尝试使用在开发模式下启动项目,我会遇到以下异常: 错误]无法执行目标io。quarkus:quar

  • 问题内容: 我有学习的背景和思想。 我喜欢使用的其中一项功能是可以将项目制作为多Maven模块。例? 令人高兴的是,每个模块都可以具有自己的依赖性,并且可以独立测试它们,而不用运行一个整体应用程序。 我们如何实现类似的东西,或者它的生态系统? 问题答案: 你绝对可以做到的。这被称为SBT Multi-Project build。您可以使用以下内容定义一个主项目和多个子项目(来自上面的docs链接)

  • 我曾广泛使用过Maven 目前有5个不同的maven项目,每个项目都有一个不同的pom.xml。到目前为止,它们之间存在依赖关系,如果需要,每一个都指向 中的另一个。 现在我们不喜欢的是 当我们发布子projectA时,我们需要手动修改所有将projectA作为依赖项的项目以使用新版本。Saw Maven有一个版本插件,不知道这会有什么帮助。 作为解决方案,我希望在POM之间有一个更干净的组织,并