跳到主要内容

运行任务

Monorepo 可能有数百甚至数千个项目,因此能够针对所有(或部分)项目运行 npm 脚本是像 Lerna 这样的工具的关键特性。

定义

  • 命令 - 开发者在终端中输入的任何内容(例如,lerna run build --scope=header --concurrency=5)。
  • 目标 - npm 脚本的名称(例如,build)。
  • 任务 - npm 脚本的调用(例如,header:build)。

示例仓库

示例基于此仓库,因此可以随意克隆并跟随。

运行所有内容

每个项目都定义了 testbuild 脚本。

运行:

npx lerna run build

这将按正确的顺序构建项目:footerheader,然后是 remixapp

终端输出
    ✔  header:build (501ms)
✔ footer:build (503ms)
✔ remixapp:build (670ms)

—————————————————————————————————————————————————————————————————————————————

Lerna (powered by Nx) 成功为 3 个项目运行目标 build(1秒)

请注意,Lerna 不关心每个构建脚本做什么。名称 build不是特殊的:它只是 npm 脚本的名称。

并发运行多个任务

您可以传递一个逗号分隔的目标列表,希望并发触发这些目标。

npx lerna run test,build,lint

例如,如果任务之间存在依赖关系,比如对于特定包,build 需要在 test 之前运行,只要您配置了适当的任务管道配置,任务运行器就会为您协调这一点。

为单个包运行任务

在开发过程中,您很少运行所有构建或所有测试。相反,您通常只针对正在更改的项目运行。例如,您可以这样运行 header 测试:

npx lerna run test --scope=header

运行 PR 影响的任务

您还可以像这样为 PR 中受影响的所有项目运行命令:

npx lerna run test --since=origin/main

此处了解更多。

控制任务运行方式

要更精细地控制任务执行顺序,请编辑任务管道配置

要加速任务执行,请了解如何缓存任务结果分发任务执行

自动加载 .env 文件

默认情况下,由 Nx 提供支持的现代任务运行器将自动为您加载 .env 文件。如果出于任何原因要禁用此行为,可以将 --load-env-files 设置为 false。

有关默认将加载哪些 .env 文件的更多详细信息,请参见:https://nx.dev/recipes/environment-variables/define-environment-variables