掌握 Lerna:管理 JavaScript Monorepos 的指南

掌握 lerna:管理 javascript monorepos 的指南

目录

简介第一章:lerna 是什么?为什么选择 monorepos?第 2 章:安装和设置 lerna先决条件分步安装指南设置您的第一个 lerna 项目第 3 章:lerna 中的依赖关系管理独立依赖提升共享依赖项引导包第 4 章:跨包运行脚本全局执行脚本针对特定包第 5 章:使用 lerna 进行版本控制和发布固定模式与独立模式将包发布到 npm第 6 章:将 lerna 与 yarn 工作区结合使用在 lerna 中启用 yarn 工作区使用 lerna + yarn 工作区优化工作流程第 7 章:lerna 高级用法过滤命令创建自定义命令第 8 章:lerna monorepos 的最佳实践逻辑包组织自动化测试和构建ci/cd 集成结论附录:常用 lerna 命令

简介

管理涉及多个相互依赖的包的大型 javascript 或 typescript 项目对于开发人员和开发团队来说可能是一项重大挑战。通常,开发人员依赖每个包的多个存储库,这会导致代码维护、依赖项管理和协作方面的开销。

lerna 是一个为管理 monorepos 开发的强大工具,它简化了这个过程。 monorepos 使团队能够在单个存储库中托管多个包,从而简化依赖关系管理并使团队之间的协作更加顺畅。

这本电子书旨在提供使用 lerna 有效管理您的 monorepos 的完整指南。无论您是处理组件库还是具有多个互连包的大型项目,您都会发现有价值的见解,帮助您通过 lerna 最大限度地提高生产力。

第一章:lerna 是什么?

lerna 是一个开源工具,有助于管理 monorepo 中的多个包。它提供了强大的功能,例如自动依赖管理、版本控制和发布,使大规模维护 javascript 和 typescript 项目变得更加容易。

立即学习“Java免费学习笔记(深入)”;

为什么选择 monorepos?

monorepos 是许多大型项目的架构选择,因为它们提供了多种好处:

共享代码库:使用 monorepos,代码重用更加容易。这减少了重复并确保项目之间的一致性。简化协作:当所有包都集中在一个地方时,开发人员可以更有效地协作。统一构建流程:跨多个包的标准化构建、测试和部署变得更加容易。

尽管有这些好处,管理单一存储库也会带来独特的挑战,特别是在管理依赖项和版本控制方面。 lerna 旨在正面应对这些挑战,为 monorepos 提供优化的工作流程。

第 2 章:安装和设置 lerna

先决条件

开始之前,请确保您已安装 node.jsnpm(或 yarn)。 lerna 与 npm 和 yarn 兼容。

第 1 步:安装 lerna

您可以通过 npm 在全局安装 lerna:

npm install --global lerna

或者,您可以将 lerna 添加为项目中的开发依赖项:

npm install --save-dev lerna

第 2 步:初始化 lerna monorepo

安装后,通过导航到项目目录并运行来初始化您的 monorepo:

lerna init

这将创建必要的配置文件,包括 lerna.json,并设置一个包文件夹来存放您的各个包。

第 3 步:添加包

在 lerna 项目中,每个包都位于 packages 下自己的子文件夹中。每个包必须有自己的 package.json 文件用于依赖管理。

示例结构:

/my-project  /packages    /package-a    /package-b  lerna.json  package.json

第 3 章:lerna 中的依赖关系管理

管理多个包之间的依赖关系是 lerna 的核心优势之一。

独立依赖

lerna 允许您向特定包添加依赖项。例如,如果只有 package-a 需要 lodash,则可以运行:

lerna add lodash --scope=package-a

提升共享依赖项

当多个包共享依赖项时,您可以将这些依赖项提升到 monorepo 的根目录。这减少了冗余并加快了安装速度。要启用提升,请将其添加到 lerna.json:

{  "hoist": true}

引导

要安装相互依赖的依赖项和链接包,请运行:

lerna bootstrap

这可确保安装所有必需的外部依赖项,并且包可以正确地相互引用。

第 4 章:跨包运行脚本

lerna 可以轻松地在 monorepo 中的所有包中执行脚本(例如构建、测试、lint)。

全局执行脚本

要在所有包中运行诸如构建之类的脚本,请使用:

lerna run build

针对特定包

如果您只想运行某些包中的脚本,请使用 –scope 标志:

lerna run test --scope=package-a

这种灵活性可以实现更有针对性的执行,从而节省开发时间。

第 5 章:使用 lerna 进行版本控制和发布

lerna 提供强大的版本控制和发布功能,使您可以轻松版本和发布软件包。

1.固定模式

在固定模式下,所有包共享相同的版本号。当任何软件包更新时,所有软件包的版本号都会增加。

2.独立模式

独立模式下,每个包都有自己的版本号。当软件包发生更改时,仅更新该软件包的版本。

要切换到独立模式,请修改lerna.json:

{  "version": "independent"}

发布包

要将包发布到 npm,请运行:

lerna publish

lerna 将根据您的配置处理版本控制和发布。

第 6 章:将 lerna 与 yarn 工作区结合使用

将 lerna 与 yarn workspaces 相结合可以通过提升更多共享依赖项来进一步优化依赖项管理。

要启用 yarn 工作区,请修改 lerna.json 文件:

{  "npmclient": "yarn",  "useworkspaces": true}

然后更新你的 package.json:

{  "workspaces": ["packages/*"]}

这种集成提高了性能并简化了大型项目的管理。

第 7 章:lerna 高级用法

过滤命令

lerna 允许过滤为特定包运行命令或排除某些包。

在特定包上运行的示例:

lerna run build --scope=package-a --scope=package-b

排除包裹的示例:

lerna run build --ignore=package-c

自定义命令

您可以在 package.json 中为专门的工作流程定义自定义 lerna 命令。然后可以在您的包中运行这些命令。

第 8 章:lerna monorepos 的最佳实践

按逻辑组织包:将相关包分组在一起,以便更好地重用代码。使用提升:提升共享依赖项可以节省空间并加快安装时间。自动化测试:使用 lerna run 对整个 monorepo 进行自动化测试。ci/cd 管道:实施持续集成和部署工作流程以自动测试和部署更改。yarn 工作区:利用 yarn 工作区与 lerna 进行更好的依赖管理。

结论

lerna 是管理 monorepos 的宝贵工具,提供简化复杂工作流程(从依赖管理到版本控制和发布)的功能。通过采用 lerna,团队可以降低复杂性、简化流程并改善协作,从而更轻松地维护大型项目。

无论您是在开发简单的组件库还是多包生态系统,lerna 都能提供有效管理项目所需的工具。继续尝试 lerna 的高级功能,以释放其全部潜力。

附录:常用 lerna 命令

lerna init:初始化 lerna monorepo。lerna bootstrap:安装依赖项和链接包。lerna add [package] –scope=[package-name]:添加对特定包的依赖。lerna run [script]:在所有包中运行脚本。lernapublish:将包发布到 npm。

快乐编码:)

以上就是掌握 Lerna:管理 JavaScript Monorepos 的指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 14:00:42
下一篇 2025年12月19日 14:00:59

相关推荐

  • 在 Bootstrap 的 parents() 函数中选择祖先元素时,是使用 parentNode 还是 parentElement?

    在 Bootstrap 中选择祖先元素时,使用 parentNode 还是 parentElement? 在 Bootstrap 中,parents() 函数用于查找元素祖先元素中所有匹配指定选择器的元素。在这个函数中,使用了 parentNode 来获取元素的父元素。 虽然 parentNode …

    2025年12月19日
    000
  • 我从使用 Vuejs 构建计算器中学到了什么

    对于我的第四个项目,我使用 vue.js 开发了一个 计算器 应用程序。对于理解如何处理用户输入、显示动态结果以及使用 javascript 执行计算来说,这是一次宝贵的经验。以下是我在构建此应用程序时学到的主要经验教训的细分。 1. 处理用户输入并更新显示 计算器需要接受用户输入(数字和运算符)并…

    2025年12月19日
    000
  • 如何在Bootstrap中进行用户列表UI设计?

    用户列表是一种常见的界面元素,用于显示系统中的用户列表。在 bootstrap 中,您可以使用各种布局和样式选项来设计用户列表的外观。 如何使用 html 和 css 制作用户列表 在 bootstrap 中创建用户列表的一种方法是使用 和 元素来创建已使用项目的无序列表。然后,您可以使用 boot…

    2025年12月19日
    000
  • Angular LAB:动画列表并使用 AnimationBuilder 实现命令式动画

    您知道 angular 包含一个复杂的动画系统吗?当我想要在元素进入屏幕或被破坏时为其设置动画时,我发现它特别有用! 此外,您还可以使用 animationbuilder 来强制播放、暂停或停止一些自定义动画!让我们看看它是如何完成的。 创建列表 在本练习中,我们首先创建一个列表,如下所示: @co…

    2025年12月19日
    000
  • 使用 React Router v6 在 React 中实现面包屑

    面包屑在网页开发中非常重要,因为它们为用户提供了一种跟踪其在网页中当前位置的方法,并有助于网页导航。 在本指南中,我们将使用 react-router v6 和 bootstrap 在 react 中实现面包屑。 react-router v6 是 react 和 react native 中使用的…

    2025年12月19日
    000
  • 令人兴奋的 React 项目,供初学者培养和提高技能

    react 凭借其基于组件的架构和庞大的生态系统,已成为构建用户界面的最流行的 javascript 库之一。如果您刚刚开始使用 react,通过构建实际项目来学习是获得信心和提高技能的最佳方式。本文概述了 10 个适合初学者的 react 项目,您可以构建这些项目来提高您的技能。 1. 待办事项列…

    2025年12月19日
    000
  • 变化检测从 Angular zonejs) 到 Angular (provideExperimentalZonelessChangeDetection) 的演变

    更改检测是 angular 的一个基本方面,负责识别和更新 dom 中因数据修改或用户交互而发生更改的部分。此过程可确保 ui 与底层数据保持一致,从而增强用户体验和应用程序性能。 zone.js 的作用 从历史上看,angular 一直依赖 zone.js 来实现其变更检测机制。 zone.js …

    2025年12月19日
    000
  • 使用 Lerna 掌握 Monorepos:综合指南

    简介 管理具有多个相互依赖的包的大型项目对许多开发团队来说是一个挑战。传统方法通常涉及为每个包使用多个存储库,这可能会导致代码维护、依赖项管理和协作方面的开销。 lerna 是一款功能强大的 javascript 工具,通过引入一种有效的方法来管理 monorepos(在单个代码库中托管多个包的存储…

    2025年12月19日
    000
  • 在深入 Web 开发之前您必须了解的事项

    1. HTML、CSS、JavaScript——三位一体 没有砖头就建不了房子,不掌握 HTML、CSS 和 JavaScript 就无法建立网站。 HTML 是您的结构,CSS 使其看起来令人惊叹,而 JavaScript 通过交互性使其栩栩如生。如果您认真对待网络开发,请从这里开始。没有捷径! …

    2025年12月19日
    000
  • 上传一个简单的应用程序并在 4 时间内获利有多困难?

    在大约一个小时内,我能够创建页面、开发服务器、连接到 Google AdSense 并购买域名。凭借 HTML、CSS、Bootstrap、Node.js、JavaScript、Git 和可用工具的基本知识,我实现了这一结果。 我使用 Bootstrap 开发了一个 HTML 页面,并使用 GitH…

    2025年12月19日
    000
  • 使用 DEVto API 在 Nextjs 中获取博客文章

    如果您想在 next.js 网站上展示您的 dev.to 博客文章,那么您很幸运! dev.to 提供了一个易于使用的 api,可让您以编程方式获取博客文章。在本指南中,我将向您展示如何将 dev.to 的 api 集成到您的 next.js 应用程序中并动态显示您的博客内容。 让我们开始吧! 1.…

    2025年12月19日
    000
  • React 与 React (RC):主要区别和迁移技巧与示例

    react 是用于构建用户界面的流行 javascript 库,随着每个新版本的发布而不断发展。在这篇博文中,我们将探讨 react 18 和即将推出的 react 19(目前处于候选发布阶段)之间的主要区别,提供新功能示例,并为使用 react 和 vite 的开发人员提供迁移技巧。 目录 简介r…

    2025年12月19日
    000
  • 使用 Laravel + React 安装 Shadcn/ui❤️

    目前有很多css框架,例如bootstrap、bulma、semantic ui等。这可以加快构建显示(用户界面)的速度。目前流行的 css 工具之一是 shadcn/ui,它之前是什么? 在其官方网站shadcn/ui上表示 “我们可以复制并粘贴到我们的应用程序中的可重用组件的集合。” 所以 sh…

    2025年12月19日 好文分享
    000
  • 初学者 JavaScript

    JavaScript 是一种高级编程语言,广泛应用于 Web 开发。它由 Brendan Eich 于 1995 年创建,现已成为世界上最流行的编程语言之一。 JavaScript 主要用于前端 Web 开发,用于创建交互式用户界面和动态网页。它还可以在 Node.js 的帮助下用于后端 Web 开…

    2025年12月19日
    000
  • 在 WordPress 中排队 CSS 和 JS 脚本以获得更好的性能

    wordpress 是开源软件 – 用户可以按照自己的意愿安装、修改和分发它。由于每个人都可以访问源代码,数百万 wordpress 专家和开发人员可以创建工具和扩展并与公众分享。 让我们看看如何将 css 和 js 文件加入到你的wordpress项目中。 大多数新开发者都喜欢, 里面“heade…

    2025年12月19日
    000
  • 比较经典流行的 React 前端库

    虽然新的前端技术每天都在出现,但有必要重新审视一些经典的前端库,了解它们的优点和缺点。这些库为网络行业设定了标准,并且至今仍被广泛使用。以下顺序并不代表优劣,只是随机的。 1.引导5 Bootstrap 是一个全面的前端工具包,提供可定制的 SASS 和预构建组件。 优点 易于使用:易于集成和维护。…

    2025年12月19日
    000
  • 全面且用户友好的项目 READMEmd 模板

    一、项目概况 【简介】 1.1 项目背景 本项目旨在通过利用[技术解决方案]设计和开发[产品概述]来解决[需求描述]的问题。 1.2 项目目标 本项目的目标是通过【实施方法】向【目标客户/用户群】提供最好的【产品/服务/解决方案】来实现【项目目标描述】。 1.3 项目范围 本项目范围包括【项目范围描…

    2025年12月19日
    000
  • Angular 是一个包裹在代码中的谜

    angular 是 google 开发的一个强大而复杂的前端框架。尽管很复杂,但它为 web 开发项目提供了无与伦比的好处。对于许多开发人员来说,angular 似乎是一个谜——它的架构、概念和语法一开始可能很难掌握。然而,一旦你解开它的秘密,你就会发现一个强大的工具集,能够创建动态和响应式的 we…

    2025年12月19日
    000
  • c++ Boost库安装与使用_c++准标准库Boost配置指南【环境搭建】

    Boost是非官方但被广泛视为“准标准库”的C++库,头文件库可直接使用,filesystem等需编译二进制库;Windows用bootstrap.bat生成b2.exe并b2编译,Linux用bootstrap.sh生成b2后编译;项目中需正确设置-I头文件路径及-L/-l或/clink库路径与名…

    2025年12月19日
    000
  • C++如何使用Boost库?(安装与入门)

    Boost库是纯头文件为主的C++扩展集合,多数组件直接包含即可使用,部分需编译链接;安装推荐源码编译,临时项目可仅配置头文件路径;使用时需正确设置-I和-l参数,新手建议从lexical_cast等头文件库入手。 Boost库是C++最成熟、最广泛使用的第三方扩展库集合,它不依赖编译器特定特性,大…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信