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

javascript - 前端项目变大如何分离和抽离公共模块进行管理?

席兴平
2024-09-05

目前使用的是git submodule。
原来是一个项目A,但是呢,随着业务的发展,header和footer其他想也要用,于是抽出来了B,后来项目中一个模块功能比较复杂也抽出来了C。
现在是header部分作为submodule,关联到第A和C中。
B可以共享A和C的store。
但是A和C是独立的,很多相公的功能要在两个项目中写,很少麻烦。
另外关联B,因为自动关联的是commitid,所以需要切换到对应的分支。
如果需求设计到三个项目,非常麻烦,需要在三个项目上建分支,然后合分支,光切分支都麻烦的要死。

这种情况,使用什么方式更合适,有经验的大佬推荐下。

共有2个答案

子车成和
2024-09-05

使用 Monorepo 架构

Monorepo 是一种将多个相关项目放在同一个版本控制仓库中的方法。有如下优势:

  • 共享代码更容易
  • 不需要在多个仓库间切换
  • 可以同时对多个项目进行更改
  • 简化了依赖管理

工具如 lerna、nx、pnpm,可以帮助管理 Monorepo。

苏鹏鹍
2024-09-05

针对你描述的问题,前端项目随着业务的发展而变得复杂,需要进行模块化分离和管理,同时减少重复代码和维护成本。在这种情况下,除了继续使用 Git Submodule 之外,还可以考虑以下几种更现代和灵活的方法来管理和组织你的项目结构:

1. Monorepo(单仓库管理多个包)

使用 Monorepo(单仓库)模式,即将所有相关的前端项目(如A、B、C)放在同一个 Git 仓库中。这种方式可以通过工具如 Lerna 或 Yarn Workspaces 来管理。这些工具支持跨包依赖管理、版本同步和发布流程简化。

  • 优点

    • 简化依赖管理,包之间的依赖可以精确控制。
    • 统一的版本控制和发布流程。
    • 易于进行跨项目的重构和代码共享。
  • 缺点

    • 仓库体积可能变得很大,影响克隆和拉取速度。
    • 需要工具支持来管理依赖和发布。

2. NPM/Yarn 包

将可复用的部分(如 header、footer 等)打包成独立的 npm 包或 Yarn 包,并在需要的地方通过 npm 或 Yarn 安装。

  • 优点

    • 易于版本控制和依赖管理。
    • 可以在多个项目中复用,减少代码重复。
    • 便于团队协作,不同团队可以专注于不同的包。
  • 缺点

    • 依赖外部源(npm/Yarn 仓库),可能影响构建速度。
    • 需要维护包的文档和更新日志。

3. Git Subtree

考虑使用 Git Subtree 替代 Git Submodule。Git Subtree 允许你将一个 Git 仓库作为子目录合并到另一个 Git 仓库中,并且可以保持这种关系的更新更加简单。

  • 优点

    • 相对于 Git Submodule,Subtree 的更新和管理更为直观和简单。
    • 避免了 Submodule 中复杂的引用和同步问题。
  • 缺点

    • 仍然需要手动处理合并和更新。
    • 可能需要额外的脚本来自动化这些过程。

结论

根据你的情况,如果项目之间共享代码较多,且需要频繁更新和维护,推荐使用 Monorepo 搭配 Lerna 或 Yarn Workspaces。这种方式可以极大地简化跨项目依赖和版本控制,提高开发效率。如果共享的代码模块较为独立,且不需要频繁更新,可以考虑将其打包为 npm/Yarn 包进行分发。对于 Git Submodule 的问题,如果更新和管理的复杂性成为瓶颈,可以考虑切换到 Git Subtree。

 类似资料:
  • webpack3.8.1 使用commonChunkPlugin对代码进行分割,提取出vendors,mainfest,发现类似0.xxx.js这样的chunk中包含依赖,如echarts, 1.请问要如何配置才可以分离出 非入口0.xxx.js中的echarts依赖? 2.如果再在图1的commonChunkPlugin中继续增加类似 new webpack.optimize.CommonsCh

  • 问题内容: 我正在开发一个新项目,其中react / express作为前端,而loopback作为后端api。我在开发环境中使用不同的端口将它们分开。 我应该如何在生产中部署它们? 托管在同一服务器上-将后端与其他子域分开? 在2台不同的服务器上托管-似乎无法使用同一域。 问题答案: 您可以部署 您的 静态托管服务* 和 CDN 前端 *** AWS S3 + AWS CloudFront Go

  • 前后端分离 在B/S架构的环境中,前后端分离一直都众说纷纭,没有一个标准。我觉得打开可以分为三个阶段: 传统的分离方法 传统意义上的前后端分离,前端指的是美工、切图、设计,后端是实现代码、数据库相关的实现。美工设计和生成的前端页面,给到程序员来做集成。那么这里其实就不分什么前后端了,程序员从数据库一直搞到前端页面的样式,就是“全能型运动员“。当然,一般传统上的开发协作模式有两种: 一种是前端先写一

  • 本文向大家介绍详解Flask前后端分离项目案例,包括了详解Flask前后端分离项目案例的使用技巧和注意事项,需要的朋友参考一下 简介 学习慕课课程,Flask前后端分离API后台接口的实现demo,前端可以接入小程序,暂时已经完成后台API基础架构,使用 postman 调试.git 重构部分: ken校验模块 auths认证模块 scope权限模块,增加全局扫描器(参考flask HTTPExc

  • 例如有一些场景,例如注册时的信息验证,可能会用到正则表达式进行验证。这个时候为了用户体验,可能会在前端进行验证,提醒用户输入正确的格式。传输到后端后,后端也会使用相同的正则对用户传输过来的信息进行验证。这个时候这个正则表达式会在前后端共用,如果要更改,那么就需要前后端都进行更改。除了这个例子,对于使用 typescript 的应用,会用到一些类型声明,这些声明和后端的类型声明也是高度相关的,声明改

  • 前端使用vue,后端使用springboot,前后端分离,且已解决跨域,登录采用jwt验证 想实现功能:如果用户通过url栏输入地址方式来访问某个页面(非登录页),对未登录用户自动跳转登录页面 请问拦截器是设置在后端还是设置在前端?另外对于静态页面能拦截吗

  • 主要内容:YAML的缩进,分离字符串当学习任何编程语言时,缩进和分离是两个主要概念。本章详细讨论了与YAML相关的这两个概念。 YAML的缩进 YAML不包括任何强制性空格。此外,没有必要保持一致。有效的YAML缩进如下所示 - 在YAML中使用缩进时,应该记住以下规则:流块必须至少包含一些具有周围当前块级别的空格。 YAML的流含量跨越多条线。流内容以或开头。 阻止列表项包括与周围块级相同的缩进,因为 符号被视为缩进的一部分。 预

  • 前言 上一篇我们遇到'少年,是不是忘了npm run mock?'的警告,这一篇我们就来解决这个问题。 开发 一、安装包 安装koa和一系列的包(我们用的是koa v2): koa koa-bodyparser koa-router boom nodemon mockjs 解释说明一下(知道的同学可以忽略): 名称 作用 koa 我们都知道Node.js有HTTP模块,来处理HTTP请求