当前位置: 首页 > news >正文

monorepo + Turborepo --- 运行任务

目录

在 package.json 中使用 scripts

自动包作用域

自定义行为

运行多个任务

使用过滤器

按包筛选

按目录筛选

筛选以包含依赖项

按源代码控制更改筛选

组合过滤器


Turborepo 通过自动并行化和缓存任务来优化你仓库中的开发者工作流程。一旦任务在 turbo.json 中注册,你就拥有了一个强大的新工具集,用于运行你仓库中的脚本

  • 对于你需要经常运行的任务,请在 package.json 中使用 scripts
  • 使用全局 turbo 快速按需运行自定义任务
  • 按目录、包名、源代码控制更改等筛选任务
  • 通过 turbo 运行任务非常强大,因为你获得了一个模型,用于在整个仓库的开发和 CI 管道中执行工作流程。

在 package.json 中使用 scripts

对于你经常运行的任务,你可以将 turbo 命令直接写入你的根目录 package.json 中。

{"scripts": {"dev": "turbo run dev","build": "turbo run build","test": "turbo run test","lint": "turbo run lint"}
}

须知: 

turbo 是 turbo run 的别名 - 但我们建议在 package.json 和 CI 工作流程中使用 turbo run,以避免与未来可能添加的 turbo 子命令发生潜在冲突。

这些脚本随后可以使用你的包管理器运行。

pnpm dev

 你只能在你的根目录 package.json 中编写 turbo 命令。在包的 package.json 中编写 turbo 命令可能会导致递归调用 turbo

自动包作用域

当你在一个包的目录中时,turbo 将自动将命令的作用域限定为该包的 包图。这意味着你可以快速编写命令,而无需为该包 编写过滤器。

cd apps/docs
turbo build

在上面的示例中,turbo build 命令将使用在 turbo.json 中注册的 build 任务,为 docs 包运行 build 任务。

须知: 使用过滤器 将覆盖自动包作用域。

自定义行为

在 run 子命令的文档 中,你将找到许多有用的标志,可以根据你的需要定制 turbo run 的行为。当运行全局 turbo 时,你可以使用如下工作流程更快地运行:

你最常用命令的变体:package.json 中的 build 脚本在它是 turbo build 时最有用 - 但你可能目前只对特定包感兴趣。你可以使用 turbo build --filter=@repo/ui 快速筛选出你感兴趣的特定包。

一次性命令:像 turbo build --dry 这样的命令不常用,因此你可能不会在你的 package.json 中为其创建脚本。相反,你可以在需要时随时在终端中直接运行它。

覆盖 turbo.json 配置:某些 CLI 标志在 turbo.json 中具有等效项,你可以覆盖它们。例如,你可能已配置 turbo build 命令以在 turbo.json 中使用 "outputLogs": "full" - 但你目前只对查看错误感兴趣。使用全局 turbo,你可以使用 turbo lint --output-logs=errors-only 仅显示错误。

{"tasks": {"build": {"outputLogs": "new-only"}}
}

运行多个任务

turbo 能够运行多个任务,并在可能的情况下进行并行化。

turbo run build test lint check-types

任务排序

turbo test lint 将以与 turbo lint test 完全相同的方式运行任务。

如果你想确保一个任务阻止另一个任务的执行,请在你的 任务配置 中表达这种关系。

使用过滤器

虽然 缓存 确保你保持快速,永不重复相同的工作,但你也可以筛选任务,仅运行 任务图 的子集。

在 --filter API 参考 中,有很多高级用例用于过滤,但下面讨论最常见的用例。

按包筛选

按包筛选是一种简单的方法,仅为你当前正在处理的包运行任务。

turbo build --filter=@acme/web

你还可以直接在你的 CLI 命令中为包筛选特定任务,而无需使用 --filter

# Run the `build` task for the `web` package
turbo run web#build# Run the `build` task for the `web` package, and the `lint` task for the `docs` package
turbo run web#build docs#lint

按目录筛选

你的仓库可能具有目录结构,其中相关的包被分组在一起。在这种情况下,你可以捕获该目录的 glob 模式,以将 turbo 聚焦于这些包。

turbo lint --filter="./packages/utilities/*"

筛选以包含依赖项

当你在处理特定包时,你可能想要为该包及其依赖项运行任务。当你更改包并希望确保更改不会破坏其任何依赖项时,... 微语法很有用。

turbo build --filter=...ui

按源代码控制更改筛选

使用过滤器根据源代码控制中的更改运行任务是仅为受你的更改影响的包运行任务的好方法。源代码控制过滤器必须用 [] 括起来。

  • 与上一个提交比较:turbo build --filter=[HEAD^1]
  • 与主分支比较:turbo build --filter=[main...my-feature]
  • 使用 SHA 比较特定提交:turbo build --filter=[a1b2c3d...e4f5g6h]
  • 使用分支名称比较特定提交:turbo build --filter=[your-feature...my-feature]

通常,你可以依靠缓存来保持你的仓库快速。当你在使用 远程缓存 时,你可以指望为未更改的包命中缓存。

组合过滤器

为了获得更高的特异性,你可以组合过滤器以进一步细化进入你的 任务图 的入口点。

turbo build --filter=...ui --filter={./packages/*} --filter=[HEAD^1]

多个过滤器组合为并集,这意味着 任务图 将包括与任何过滤器匹配的任务。有关过滤器高级用法的更多信息,请参阅 --filter API 参考。

http://www.dtcms.com/a/266695.html

相关文章:

  • MySQL ON DUPLICATE KEY UPDATE 用法详解
  • 鸿蒙开发List长按Item拖拽切换效果
  • 基于区块链的物联网(IoT)安全通信与数据共享的典型实例
  • JSONLines和JSON数据格式使用教程
  • AI大模型:(二)1.5 Stable Diffusion中文文生图模型部署
  • 30 秒锁定黑客攻击:SLS SQL 如何从海量乱序日志中“揪”出攻击源
  • 【C语言刷题】第十天:加量加餐继续,代码题训练,融会贯通IO模式
  • 短篇小说7.4
  • BM4 合并两个排序的链表
  • QT6 源(152)模型视图架构里的表格窗体视图 QTableWidget 篇二:学习本类的 protected 权限的成员函数,以及信号与槽函数
  • c语言中的函数IV
  • MCMC:高维概率采样的“随机游走”艺术
  • pybind11 导出 C++ map 在 Python 层 get 访问慢的优化方案
  • 区块链技术核心组件及应用架构的全面解析
  • python打卡day59@浙大疏锦行
  • 车载电子电气架构 --- OEM走向开放协同与敏捷迭代
  • 数据结构:队列的顺序存储实现
  • 【Linux 系统】基础IO——Linux中对文件的理解
  • 【深度学习新浪潮】如何使用大模型等技术基于序列预测蛋白质的结构,功能和靶点?
  • 【学习笔记】Lean4基础 ing
  • 邮科千兆8光8电工业级交换机互联网的脉搏
  • 洛谷刷题8
  • 云原生Kubernetes系列 | Ingress和Egress网络策略NetworkPolicy结合案例使用详解
  • 5060Ti安装黑屏问题一解
  • 【WIP】【VLAVLM——InternVL系列】
  • Maven编译和打包插件
  • cd-agent更换cd模型(自用)
  • i18next + 原生JS 双引擎:打造前端多语言系统最佳实践
  • Android 网络请求优化全面指南
  • 韩国小说《素食者》读后感