运行任务
Monorepo 可能有数百甚至数千个项目,因此能够针对所有(或部分)项目运行 npm 脚本是像 Lerna 这样的工具的关键特性。
定义
- 命令 - 开发者在终端中输入的任何内容(例如,
lerna run build --scope=header --concurrency=5
)。 - 目标 - npm 脚本的名称(例如,
build
)。 - 任务 - npm 脚本的调用(例如,
header:build
)。
示例仓库
示例基于此仓库,因此可以随意克隆并跟随。
运行所有内容
每个项目都定义了 test
和 build
脚本。
运行:
npx lerna run build
这将按正确的顺序构建项目:footer
和 header
,然后是 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