前端工程化之多个项目如何同时高效管理 — monorepo

2023-10-30 21:48

本文主要是介绍前端工程化之多个项目如何同时高效管理 — monorepo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

monorepo 不仅限于前端,但此篇博文只谈前端。

是什么

wikipedia: In version control systems, a monorepo (“mono” meaning ‘single’ and “repo” being short for ‘repository’) is a software development strategy where code for many projects is stored in the same repository.

翻译过来就是:在版本控制系统中,monorepo 是一种软件开发策略,其中许多项目的代码存储在同一存储库中。

为什么

在公司内,如果项目较多,每一个项目都会有一个Git仓库,就会导致新来的员工每一次更改项目的时候都需要从 Git 仓库上面拉一份代码下来比较麻烦。

那如果将所有的项目放在一个仓库一起管理呢?这就是 monorepo。

优点

  1. 对依赖统一进行管理。
  2. 可以抽取逻辑维护公共库。
  3. 所有项目统一配置相同的工程配置。

缺点

  1. 需要有比较严格的 CR 规范。
  2. Git 权限管理难以控制。
  3. 版本控制比较麻烦

项目都需要规范的流程。

怎么做

目前来说,前端算是有两种比较常见的对 monorepo 的方案:

  1. lerna.js
  2. yarn workspace

当然,它们也可以同时使用。

yarn workspaces

它允许设置多个包,即只需运行一次 yarn 安装即可一次性安装所有包。

package.json文件中添加以下内容

{"private": true,"workspaces": ["workspace-a", "workspace-b"]
}
禁止使用

.yarnrc 文件中添加:

workspaces-experimental false

learn.js

Github 仓库在:https://github.com/lerna/lerna

Lerna is a tool that optimizes the workflow around managing multi-package repositories with git and npm.

Lerna 是一个使用 git 和 npm 优化管理多包存储库的工作流程的工具。

需要注意的是:lerna 只是一个优化工作流程的工具,并不是一个部署工具。

安装
# 新建一个项目
mkdir lerna-demo && cd lerna-demo# 初始化项目
npm init -y# 安装 lerna
yarn add lerna -D# 初始化 lerna 的项目
npx lerna init

此时一个最基本的 lerna 项目算是完成了。

(记得添加 .gitignore )

使用

上述的命令完成之后,现在项目的文件目录:

在这里插入图片描述

更改一下 package.json 在其中加一个字段:

{"private": true,// ...
}

由于我们管理的是子项目,一般不对父项目进行发布处理,所以将 private 设置为 true

然后在 packages 目录中新建项目即可。

lerna 会自动检测到 packages 里面的项目进行管理。

packages 目录中的项目需要注意一件事情:

  • package.json 的 name 字段需要和文件夹的名称相同。
命令
  • lerna init: 初始化
  • learn list: 列出现在管理的项目
  • lerna diff: 列出最近一次 release 的区别
  • lerna change: 更改了哪些 package
  • lerna bootstrap: 安装依赖并且链接任何交叉依赖项
  • lerna clean: 清理所有依赖项
  • lerna exec: 在每个 package 执行命令
  • lerna run: 在包含 npm script 中的每个 package 执行 npm script
  • lerna import: 将 package 导入到具有提交历史记录的 monorepo 中
  • lerna link: 将相互依赖的所有 package 符号链接在一起

同时使用

lernayarn workspace 可以同时使用

lerna.json 添加:

{"packages": ["packages/*"],"version": "0.0.0","npmClient": "yarn","useWorkspaces": true
}

然后在 package.json 添加:

{// ..."private": true,"workspaces": ["packages/*"]
}
区别

yarn workspace 中有这么一段:

Yarn’s workspaces are the low-level primitives that tools like Lerna can (and do!) use. They will never try to support the high-level feature that Lerna offers, but by implementing the core logic of the resolution and linking steps inside Yarn itself we hope to enable new usages and improve performance.

这个就是区别

参考

wikipedia Monorepo: https://en.wikipedia.org/wiki/Monorepo

yarn workspace: https://classic.yarnpkg.com/en/docs/workspaces

lerna github: https://github.com/lerna/lerna

这篇关于前端工程化之多个项目如何同时高效管理 — monorepo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/310779

相关文章

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

深度解析Java项目中包和包之间的联系

《深度解析Java项目中包和包之间的联系》文章浏览阅读850次,点赞13次,收藏8次。本文详细介绍了Java分层架构中的几个关键包:DTO、Controller、Service和Mapper。_jav... 目录前言一、各大包1.DTO1.1、DTO的核心用途1.2. DTO与实体类(Entity)的区别1

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

springboot项目打jar制作成镜像并指定配置文件位置方式

《springboot项目打jar制作成镜像并指定配置文件位置方式》:本文主要介绍springboot项目打jar制作成镜像并指定配置文件位置方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录一、上传jar到服务器二、编写dockerfile三、新建对应配置文件所存放的数据卷目录四、将配置文