Turborepo 1.3

週四,2022年6月23日
Greg Soltis
姓名
Greg Soltis
X
@gsoltis
Nathan Hammond
姓名
Nathan Hammond
Tom Knickman
姓名
Tom Knickman
X
@tknickman
Jared Palmer
姓名
Jared Palmer
X
@jaredpalmer
Gaspar Garcia
姓名
Gaspar Garcia
X
@gaspargarcia_
Becca Z.
姓名
Becca Z.
X
@becca__z

Turborepo 1.3 版本帶來了更優化的快取和彈性,其中包括:

立即執行 npm install turbo@latest 來更新。

Pipeline inputs

除了環境變數、相依性和 pipeline 設定之外,當計算每個 package.json 腳本的雜湊指紋(turbo 用於索引其快取並確定是否需要重新執行腳本的金鑰)時,turbo 將會考量套件資料夾中所有未被 git 忽略的文件。使用 Turborepo 1.3+,您現在可以在 turbo.json pipeline 中指定 inputs 的 glob 模式,以控制哪些文件與特定腳本的快取相關。 這表示您現在可以在 turbo.json 中表達以下內容:

讓我們來看一個具體範例:假設我們有一個 monorepo,其中包含一個用於文件網站的 Next.js 應用程式,位於 ./apps/docs-site,以及一些套件,以及一些位於 monorepo 根目錄 ./docs 資料夾中的 markdown 文件。

Monorepo 範例
.
├── docs/
   ├── api-reference.md
   ├── getting-started.md
   └── intro.md
├── apps/
   ├── docs-site/
   ├── components/
   ├── pages/
   └── [slug].js
   ├── README.md
   └── package.json
   └── web-site/
       ├── pages/
       ├── README.md
       └── package.json
├── packages/
   ├── configs/
   └── ui/
├── package.json
└── turbo.json

假設 Next.js docs-site 渲染來自 ./docs 資料夾的 markdown 文件。我們現在可以在應用程式的 package.json 中設定 build 腳本,以在 turbo.json 中使用 inputs,以便更精確地指定哪些文件是相關的(以及哪些文件應該影響快取),如下所示:

./turbo.json
{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    // ... omitted for brevity
    "build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**", "dist/**"]
    },
    "docs#build": {
      "dependsOn": ["^build"],
      "outputs": [".next/**", "!.next/cache/**"],
      // Define set of relevant globs which impact caching of docs site
      // builds
      "inputs": [
        "../../docs/**/*.md",
        "pages/**",
        "components/**",
        "package.json"
      ]
    }
  }
}

注意:與 outputs 類似,inputs 是相對於相關的 package.json 定義的,但它們可以位於給定資料夾之外(例如 ../../docs/**)。

從 monorepo 根目錄執行和快取腳本

從 1.3 版本開始,turbo 現在可以從 monorepo 根目錄的 package.json 文件中執行和快取腳本,這將在遷移到 Turborepo 時提供顯著的幫助。

若要設定此功能,請在 turbo.jsonpipeline 設定中使用 "//#<script>": {...} 格式指定根腳本。 // 告訴 turbo 腳本是相對於 monorepo 的根目錄,而不是每個工作區套件。

關於根腳本和執行範圍,有 2 個重要事項需要注意:

一個定義根腳本 check-examples 並將根目錄加入 test 的範例 pipeline 可能看起來像這樣:

./package.json
{
  "name": "my-turborepo",
  "private": true,
  "scripts": {
    "test": "echo 'test!'",
    "check-examples": "./check-examples.sh"
  },
  "devDependencies": {
    "turbo": "latest"
  }
}
./turbo.json
{
  "$schema": "https://turbo.dev.org.tw/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"]
    },
    "test": {
      "dependsOn": ["^build"],
      "outputs": []
    },
    // This will cause the "test" script from all workspace package.json's
    // AND the root package.json to be included when "turbo run test" is run
    "//#test": {
      "dependsOn": [],
      "outputs": []
    },
    // This will cause the "check-examples" script in the root package.json
    // to be run when "turbo run check-examples" is run. Since a general
    // "check-examples" script is not defined in the pipeline, only the root
    // package.json's "check-examples" script will be included
    // when "turbo run check-examples" is run
    "//#check-examples": {
      "dependsOn": [],
      "outputs": [],
      "inputs": [
        "examples/**/*.ts",
        "examples/**/*.tsx",
        "examples/**/*.json",
        "examples/**/*.js",
        "examples/**/*.yaml",
        "cli/**/*.ts",
        "./scripts/run-example.sh"
      ]
    }
  }
}

注意:我們建議在 pipeline 中宣告根任務時,始終指定 inputs 以改善快取。

全新的 CI/CD 範例

我們新增了將 Turborepo 和遠端快取與以下工具搭配使用的範例:

如果您希望在此處看到其他範例,請開啟 GitHub 討論告知我們。

其他錯誤修正和改進

社群

自從 四月初發布 Turborepo v1.2 以來,我們看到了驚人的採用率和社群成長:

Turborepo 是包含我們的核心團隊在內,超過 136 位貢獻者的共同努力成果。

本次發布由以下人員的貢獻促成:@gsoltis、@nathanhammond、@tknickman、@jaredpalmer、@zvictor、@ObliviousHarmony、@O4epegb、@rafaeltab、@mcmontseny、@bertspaan、@Jastor11 和 @enBonnet

感謝您持續的支持、回饋以及與我們的合作,使 Turborepo 成為您首選的建置工具。