跳到主要内容

turborepo

高性能的Monorepo构建系统,Vercel官方维护 Turborepo 让你在一个 Git 仓库中管理多个前端、后端和共享包,通过任务编排与缓存提高构建效率

  • 解决大型 monorepo 项目构建速度缓慢的一大痛点
  • 构建了无需配置复杂的工作,只需要我们通过脚本和工具,即可快速搭建您的Monorepo TurboRepo 支持使用Yarn Npm Pnpm
  • turbo 的核心是永远不会重新构建已经构建过的内容。turbo 会把每次构建的产物与日志缓存起来,下次构建时只有文件发生变动的部分才会重新构建,没有变动的直接命中缓存并重现日志

turborepor任务编排理解

  • 可以管理多个项目中任务的执行顺序、依赖关系和并行执行
  • 可以并行执行:比如web服务、api服务,可以同时构建
  • 依赖关系顺序管理:先构建share包,再构建web包
  • 统一管理:一条命令可以执行多个任务脚本

优势​

  • 【turborepo多任务并行处理】turborepo它能够有效地安排任务,同时异步执行多个任务,而lerna一次只能执行一项任务
  • 【更快的增量构建】 如果我们的项目过大,构建多个子包会造成时间和性能的浪费,turborepo中的缓存机制 可以帮助我们记住构建内容 并且跳过已经计算过的内容,优化打包效率
  • 【云缓存】Turbo通过其远程缓存功能可以帮助多人远程构建云缓存实现了更快的构建。
  • 【约定的配置】通过约定降低复杂性,只需几行JSON 即可配置整个项目依赖,执行脚本的顺序结构。

turbo配置​

  • baseBranch: 声明基础分支
  • pipeline:创建的任务管道,其实就是命令
    • 在pipeline中的每一个key都指向我们在package.json中定义的script脚本执行命令
      • 并且在pipeline中的每一个key 都是可以被turbo run所执行 执行pipeline的脚本的名称
      • 执行turbo run ***命令的时候 turbo 会根据我们定义的 Pipelines里对命令的各种配置去对我们的每个package中的package.json 中 对应的script执行脚本进行有序的执行和缓存输出的文件
    • dependsOn 表示当前命令所依赖的命令
      • ^表示 dependencies和 devDependencies 的所有依赖都执行完 build,才执行 build
    • outputs 表示命令执行输出的文件缓存目录
      • 默认值为["dist/**", "build/**"]
json
{
"baseBranch": "origin/main" // 基础分支,如果基础分支不是origin/master 需指明
"pipeline":{
"build": {
"dependsOn": [
"^build"
],
"outputs": ["dist/**"]
},
}
}

build配置​

  • 需要在 turbo.json 中 pipeline 中的 build 设置

    bash
    "dependsOn": ["^build"],
    • 只有加了 ^ 这样 我们才能 先去 执行 依赖 的 三个子包的build 命令