跳至主要内容
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

运行任务

Monorepo 可能包含数百甚至数千个项目,因此能够针对所有(或部分)项目运行 npm 脚本是 Lerna 这类工具的核心功能。

术语定义

  • 命令(Command) - 开发者在终端输入的任何指令(例如:lerna run build --scope=header --concurrency=5)。

  • 目标(Target) - npm 脚本的名称(例如:build)。

  • 任务(Task) - 对 npm 脚本的一次具体调用(例如:header:build)。

示例仓库

本文示例基于此仓库,欢迎克隆并跟随操作。

运行所有任务

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

执行:

npx lerna run build

系统将按正确顺序构建项目:先构建 footerheader,然后是 remixapp

Terminal Output
    ✔  header:build (501ms)
✔ footer:build (503ms)
✔ remixapp:build (670ms)

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

Lerna (powered by Nx) Successfully ran target build for 3 projects (1s)

请注意,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