gpt4 book ai didi

基于 lerna 实现 Monorepo 项目管理

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章基于 lerna 实现 Monorepo 项目管理由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

基于 lerna 实现 Monorepo 项目管理

随着团队建设以及相关业务的日益增长,越来越多的 NPM 包需要多人协同维护,各个项目之间有关联,就不得不在多个编辑器之间切换,以及通过 npm link 来调试,开发的效率受到制约,那有没有一种方式可以解决现在的痛点?答案就是 Monorepo.

基于 lerna 实现 Monorepo 项目管理

在字节跳动内部的百科词条中对于 Monorepo 的定义如下:

Monorepo 是一种将多个项目代码存储在一个仓库里的软件开发策略.

目前来讲,Lerna 作为 JavaScript项目的多包管理器,已经是比较成熟,并已被现代企业所验证,因此接下来将逐步搭建一个基于 Lerna[1] 的 Monorepo 管理环境,希望可以帮助大家在各司业务中落地并实现降本提效.

根据笔者经验,Monorepo 将显著提升开发人员的愉悦度,所以赶紧搞起来吧.

本文主要内容结构如下,朋友们可按需食用:

基于 lerna 实现 Monorepo 项目管理

1、为什么选择 Lerna

基于 lerna 实现 Monorepo 项目管理

Monorepo 能被定义为策略,那么一定是一种能够解决问题的方案,基于 Lerna 实现的 Monorepo 多包管理方式,能解决的问题(优点)如下:

  1. 扁平:同一仓库(项目)下,统一管理维护多个 package
  2. 集中:在根目录的 node_modules/ 文件夹下维护所有 package 的三方依赖
  3. 简化:根据文件变动统一执行命令,按需发包,自动升级版本并回写仓库、打 tag
  4. 高效:有互相依赖的项目直接可直接关联,避免开发人员在多仓库之间切换

当然,Lerna 经过长时间的使用,一些问题也在生产环境中暴露出来,典型的如:

  1. 无效构建:每次发包前会对所有的 package 进行构建
  2. 无效依赖:每次发包都会安装所有 package 的依赖项
  3. 幽灵依赖:Phantom dependencies[2] 在依赖提升(hoist)后更加明显

这里将问题罗列出来,不是说 Lerna 就应该被放弃,而是我们应当清楚技术方案的利与弊,并结合项目的实际情况做一些取舍,上述的缺点只是在构建中不那么优雅,但并不影响 Lerna 作为一种可落地 Monorepo 的方案.

2、初始化一个 Monorepo 形式的项目

我们将从 0 到 1 构建一个纯净的、基于 Lerna 的 Monorepo 项目,并将利于团队协作规范的 ESlint 校验,Prettier 自动格式化,以及 git commit message 规范一并完善.

2.1 初始化项目结构

首先就是得全局安装 Lerna:

  1. yarn global add lerna
  2. // or
  3. npm install lerna -g

然后就是新建项目目录,并使用 Lerna 初始化一个基本结构 。

  1. mkdir dyboy-lerna-project
  2. cd dyboy-lerna-project/
  3. lerna init --independent

如此之后,便得到了如下的一个文件目录结构:

  1. .
  2. ├── lerna.json // lerna 的配置文件
  3. ├── package.json // 当前项目的描述文件
  4. └── packages/ // 存放所有包的文件夹

Lerna 初始化项目的时候,追加了一个 --independent 的参数,其含义是使用独立模式.

在 Lerna 中,有两种模式:

  1. 固定模式:所有 package 的版本号保持一致,每次更新发包都是全量的
  2. 独立模式:每个 package 版本号各自独立,互不影响,每次更新按需发包

一般我们都会选择独立模式,来避免多 package 下频繁发包的情况出现,尤其是在一些业务变化频繁的项目下,发包压力恐怖如斯 。

最后此篇关于基于 lerna 实现 Monorepo 项目管理的文章就讲到这里了,如果你想了解更多关于基于 lerna 实现 Monorepo 项目管理的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com