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

Node.js Turbo 包入门教程

一、Turbo 是什么?

Turbo 是 Vercel 开发的高性能构建工具,专为 Monorepo(多包仓库)设计,核心功能包括:

  • 任务并行执行:自动解析任务依赖,并行运行独立任务。
  • 智能缓存:复用上一次成功执行的结果,加速 CI/CD。
  • 依赖图管理:通过 turbo.json 定义任务流程,支持全局依赖。
  • 跨平台兼容:支持 Windows、macOS、Linux。

二、快速入门:从安装到第一个任务

1. 安装 Turbo

全局安装(推荐)
npm install turbo --global
# 或
yarn global add turbo
本地安装(项目内使用)
npm install turbo --save-dev
# 或
yarn add turbo --dev

2. 初始化 Turbo 配置

在项目根目录运行:

turbo init

此命令会生成 turbo.json 文件,定义任务管道和全局依赖。

3. 创建示例 Monorepo 项目

项目结构
my-project/
├── packages/
│   ├── app1/
│   │   └── package.json
│   └── app2/
│       └── package.json
├── package.json
└── turbo.json
示例 turbo.json
{"pipeline": {"build": {"dependsOn": ["^build"],"outputs": ["dist/**"]},"test": {"dependsOn": ["build"],"outputs": []}},"globalDependencies": ["**/.env"]
}

三、核心命令:turbo run 详解

1. 基本用法

并行执行任务
turbo run build

Turbo 会自动解析依赖关系,并行执行无依赖冲突的任务。

指定目标包
turbo run build --filter=app1

仅构建 app1 包。

过滤文件变更
turbo run build --filter=...[origin/main]

仅构建自 main 分支以来有变更的包。

2. 高级参数

并行执行(强制)
turbo run test --parallel

忽略任务依赖,强制并行执行(需谨慎使用)。

跳过依赖解析
turbo run build --no-deps

不解析任务依赖,直接执行(适合独立任务)。

清理缓存
turbo run build --force

跳过缓存,强制重新执行任务。

3. 输出与日志

简化日志
turbo run build --log-prefix=none

隐藏日志前缀,适合 CI/CD 流水线。

生成 JSON 输出
turbo run build --json > output.json

获取结构化任务执行结果,便于自动化处理。

四、实战示例:构建 Monorepo 项目

1. 定义任务管道

turbo.json 中定义 buildtest 任务:

{"pipeline": {"build": {"dependsOn": ["^build"],"outputs": ["dist/**"]},"test": {"dependsOn": ["build"],"outputs": ["coverage/**"]}}
}

2. 执行构建与测试

turbo run build test

Turbo 会先执行所有包的 build 任务,再并行执行 test 任务。

3. 利用缓存加速

首次执行
turbo run build --cache

Turbo 会缓存构建结果到 node_modules/.turbo

后续执行
turbo run build --cache

仅重新执行变更的包,复用缓存结果。

五、Turbo vs Lerna:为何选择 Turbo?

特性TurboLerna
任务并行自动解析依赖,智能并行需手动配置 lerna.json
缓存机制增量构建,复用上一次结果无内置缓存,需配合其他工具
依赖管理支持全局依赖(如 .env依赖需在每个包中单独管理
执行速度快 10-100 倍(Vercel 官方数据)较慢,尤其在大规模 Monorepo 中

六、最佳实践与常见问题

1. 最佳实践

  • 定义全局依赖:在 turbo.json 中声明 .env 等全局文件,避免重复执行。
  • 合理拆分任务:将耗时任务(如构建)与快速任务(如 lint)分离。
  • 利用缓存:在 CI/CD 中启用 --cache,减少重复构建。

2. 常见问题

Q: 如何排除特定包?

A: 使用 --filter=!app1 排除 app1 包:

turbo run build --filter=!app1
Q: 如何传递参数给任务?

A: 通过 -- 传递参数:

turbo run build -- --scope=app1
Q: 如何清理 Turbo 缓存?

A: 删除 node_modules/.turbo 目录:

rm -rf node_modules/.turbo

七、总结

Turbo 是 Node.js Monorepo 项目的终极工具,通过 turbo run 命令可实现:

  • 智能任务调度:自动解析依赖,并行执行。
  • 极速构建:利用缓存复用结果,减少重复工作。
  • 跨包依赖管理:通过 turbo.json 统一配置。

掌握 Turbo 后,可显著提升大型项目的开发效率,尤其适合前端工程化场景。

http://www.xdnf.cn/news/1261891.html

相关文章:

  • Sklearn 机器学习 数据降维PCA 使用PCA算法
  • Spark在什么情况下CBO才会判断失误,如何避免
  • 什么是2米分辨率卫星影像数据?
  • Flutter开发 多孩子布局组件
  • 面向真实场景的定制化图像降质模型设计方案
  • 化工厂安全升级:分布式光纤传感的 “实时监测 + 精准预警” 方案
  • VRTE 的应用程序部署到Ubuntu上 报错:bash: ./rb_exmd: No such file or directory
  • 高效数据隔离方案:SpringBoot + JSqlParser 全解析!
  • [windows]torchsig 1.1.0 gr-spectrumdetect模块安装
  • 第七篇:动画基础:requestAnimationFrame循环
  • Java-反射
  • 【华为机试】63. 不同路径 II
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(中)
  • VScode 文件标签栏多行显示
  • python之注册机制总结
  • 什么是ros功能包和ros节点
  • @CacheConfig​​当前类中所有缓存方法详解
  • Redis数据组织方式
  • electron 静默安装同时安装完成后自动启动(nsis)
  • 38-TS之类型保护
  • 3D TOF 视觉相机:工业视觉的破局者,重塑视觉感知的未来
  • ​​《深入浅出K-means算法:从原理到实战全解析》​预告(提纲)
  • 13. 搜索引擎-ElasticSearch
  • 学习Java的Day27
  • 初识排序(下)-- 讲解超详细
  • Effective C++ 条款30:透彻了解inlining的里里外外
  • MQTT与服务器通讯
  • 微软公布Windows 2030,要彻底淘汰鼠标、键盘
  • 控制建模matlab练习13:线性状态反馈控制器-②系统的能控性
  • conda或mamba install 相关软件报错