发布于 2026-01-06 0 阅读
0

Lerna 重生 - v6 版本有哪些新内容?

Lerna 重生 - v6 版本有哪些新内容?

Lerna v6 版本发布啦!!以下是关于全新 Lerna 体验你需要知道的一切

目录

勒纳仍在不断进化

如果您已经知道这一点,请随意跳过。但令人惊讶的是,许多人仍然不知道Lerna 已经回归,它不仅没有过时或被弃用,而且还获得了全新的功能。我们Nrwl团队是 Nx 的创建者,鉴于我们在单体仓库领域拥有丰富的经验,当Lerna 在 2022 年 4 月被宣布“停止维护”时,我们主动提出接管它的维护工作

自 2022 年 5 月我们接手以来,一切都像坐过山车一样。我们推出了全新的网站,更新了文档内容,并将Lerna 的速度提升了 10 倍。现在,Lerna v6 正式发布!

默认启用缓存的快速 Lerna

在 Lerna v4 之前,任务调度一直使用 npm 包来实现。在p-mapv5.1版本中,我们引入了另一种任务调度机制。它的优势在于:Nx 内置了缓存功能,这也为 Lerna 提供了缓存支持,使其速度飞快。最近的基准测试表明,Lerna 的速度比 Lage 快 2.5 倍比 Turbo 快约 4 倍(截至 2022 年 10 月;您可以自行测试)。p-queuenx

到目前为止,您需要通过设置以下useNx标志来启用“Nx 支持” lerna.json

// lerna.json
{
    ...
    "useNx": true
}
Enter fullscreen mode Exit fullscreen mode

过去几个月我们一直在测试这项可选功能,并收到了来自企业和开源项目的大量宝贵反馈。因此,在 v6 版本中,所有 Lerna 工作区默认都会启用 useNx,true即使您的 Lerna 配置文件中没有设置。如果您不想使用此功能,可以通过将该标志设置为 false 来禁用它。

nx.json要体验快速缓存,请确保在 Lerna 工作区的根目录下有一个文件,用于定义可缓存的操作。更多详情请参阅文档。以下是一个配置文件示例:

{
  "tasksRunnerOptions": {
    "default": {
      "runner": "nx/tasks-runners/default",
      "options": {
        "cacheableOperations": ["build", "test"]
      }
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

请注意,您还可以运行……

npx lerna add-caching
Enter fullscreen mode Exit fullscreen mode

nx.json..根据您现有的 Lerna 工作区自动生成配置文件。

使用 Lerna 进行远程缓存

通过使用 Nx 作为 Lerna 的任务调度器,它继承了 Nx 的所有功能。这不仅包括本地缓存,还包括远程缓存分布式任务执行的可能性。

远程缓存允许您将本地缓存分发给同事和持续集成 (CI) 系统。这是通过Nx Cloud实现的。但分布式缓存只是 Nx Cloud 的一个方面。Nx Cloud 还提供“运行视图”,可以直观地展示您的 CI 运行情况,并提供便捷的分组和筛选功能。更重要的是,它能够将任务动态地分配到多台机器上,并通过优化实现最佳并行化和机器利用率。

Nx Cloud 功能概述

你只需要运行一下就可以了……

npx nx connect-to-nx-cloud
Enter fullscreen mode Exit fullscreen mode

在您的 Lerna 工作区中,它将引导您回答几个问题,并为您设置Nx Cloud

请参阅文档了解更多信息

定义任务管道

在单体仓库环境中运行任务时,您希望尽可能提高并行化程度,但同时也要考虑任务间的潜在依赖关系。例如,假设您有一个 Remix 应用,它依赖于某个shared-ui库。您希望确保shared-ui在构建或运行 Remix 应用之前,该库已经构建完成。

nx.json使用 Lerna v6,您可以通过在文件中定义以下代码来实现targetDefaults

// nx.json
{
  ...
  "targetDefaults": {
    "build": {
      "dependsOn": ["^build"]
    },
    "dev": {
      "dependsOn": ["^build"]
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

在这种情况下,无论何时运行 `lerna`builddev`lerna`,Lerna 都会首先build对所有依赖包运行该任务。

更多信息请参阅我们的文档

Lerna 添加缓存命令

如果您尚未设置缓存或任务管道,请不要担心。我们提供了一个专门的命令,旨在尽可能简化操作:

npx lerna add-caching
Enter fullscreen mode Exit fullscreen mode

这将扫描您的工作区,找到所有 package.json 脚本,然后指导您完成缓存操作和任务管道的配置

这里有一个快速演示视频:

您当然始终可以手动创建 nx.json 文件。

PNPM 对 Lerna 的支持

过去,Lerna 对 PNPM 的支持并不完善。我们在 v6 版本中修复了这个问题。现在,当您将 Lerna 与 PNPM 结合使用时,我们会确保根据 PNPM 的协议检测软件包pnpm-workspace.yaml,并相应地useWorkspaces: true更新 PNPM 的协议。pnpm-lock.yaml
此外,我们还添加了对PNPM 所用协议lerna version的正确支持。workspace:

现在,您终于可以将速度最快的包管理器之一与全新的 Lerna 快速体验结合使用。此外,请务必查看我们的文档了解所有详细信息

动态终端输出

当在大量项目中并行运行任务时,很难在终端中跟踪哪些部分已构建完成,哪些任务失败。因此,新版 Lerna 配备了动态终端输出,仅显示当前最相关的信息。

Lerna动态终端截图,由Nx提供支持

请注意,您仍然可以像往常一样在 CI 上看到所有输出。

适用于 Lerna 工作区的 VSCode 扩展

Lerna 现在拥有一个专门的 VSCode 扩展,可以帮助您浏览您的 monorepo。这使您可以直接从上下文菜单(右键单击项目)运行命令:

Nx Console 集成到 VSCode 右键菜单中的屏幕截图

或者在工作区中可视化一个项目及其与其他项目的关系。

屏幕截图显示了 Lerna 工作区中的 Nx 控制台图形可视化效果。

您还可以在配置文件中获得智能自动补全功能。以下示例展示了在编辑nx.json任务依赖项时,Nx 控制台如何提供基于上下文的信息。

nx.json 文件中 Nx 控制台自动补全功能的屏幕截图

勒纳维修

Lerna v6 内置了一个lerna repair命令。运行此命令会自动修复您的 Lerna 配置。例如,在 Lerna v6 中,您无需再useNx: true在配置文件中添加lerna.json`<your_name>`,因为这将是新的默认配置。运行lerna repair此命令即可修复此问题。

lerna 修复控制台日志输出的屏幕截图

这样一来,您就可以始终拥有最新的 Lerna 设置,而且随着我们未来不断添加迁移功能,它的功能将会变得更加强大。

勒纳和普雷蒂尔

如今,Prettier 已成为每位开发者的标准工具链的一部分。在 Lerna v6 中,我们新增了一项功能,用于检测工作区中是否已安装 Prettier。如果已安装,我们会自动将其应用到所有通过运行 `lerna version` 命令更新的文件。从此无需再为了修复文件格式而提交后续代码!

迁移到 Lerna v6

从 Lerna v5 迁移到 v6 不会造成任何功能破坏。我们提高了主版本号,是因为我们更改了一些默认设置,为了谨慎起见,也为了更好地与用户沟通,我们增加了主版本号。

同样地,如果您仍在使用 v4 版本,并且想要迁移到 v6 版本,这应该相当简单,并且在大多数情况下不会出现问题。

只需将 Lerna 软件包版本更新到最新版本,然后运行即可。

npx lerna add-caching
Enter fullscreen mode Exit fullscreen mode

启用和配置工作区的缓存。

遇到问题或需要帮助吗?我们还有一个由社区成员组织的 Slack 频道,Nx 和 Lerna 的核心成员也会在那里交流。加入https://go.nrwl.io/join-slack并进入#lerna频道即可。

Lerna现在使用Nx了。我还能继续使用我的Lerna命令吗?

当然!Lerna 与 Nx 集成的一大优势在于,您可以继续使用现有的 Lerna 命令,而无需将其迁移到新的语法。它们现在运行速度会快得多。

您可以在我们的文档中了解更多相关信息

您是否使用 Lerna 维护开源软件仓库?

如果您是开源软件维护者,并且正在使用 Lerna 工作区,请告诉我们!您可以在 Twitter 上
联系 Lerna 团队,或者直接联系。我们很乐意查看并协助您进行迁移,我们会检查您的代码仓库,确保其在单体仓库设置和缓存等功能方面都已配置到最佳状态。

也就是说,作为开源维护者,您还可以获得 Nx Cloud 提供的无限免费计算缓存。我们很乐意为您设置这项服务。


了解更多

另外,如果你喜欢这篇文章,请点击❤️,并务必在Twitter上关注JuriLerna,获取更多内容!

# nx

文章来源:https://dev.to/nx/lerna-reborn-whats-new-in-v6-245j