返回部落格

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

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

讓我們來看一個具體的例子:假設我們有一個單一程式碼倉庫,其中包含一個位於 ./apps/docs-site 的 Next.js 應用程式,用於文件網站、一些套件和 ./docs 資料夾中位於單一程式碼倉庫根目錄的一些 markdown 檔案。

單一程式碼倉庫範例
.
├── 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/**)。

從單一程式碼倉庫的根目錄執行和快取腳本

從 1.3 版本開始,turbo 現在可以執行和快取位於單一程式碼倉庫根目錄的 package.json 檔案中的腳本,這將在遷移到 Turborepo 時有很大的幫助。

若要設定此功能,請在 turbo.json 中使用 "//#<script>": {...} 的形式在 pipeline 設定中指定根腳本。// 會告知 turbo 該腳本是相對於單一程式碼倉庫的根目錄,而不是每個工作區套件。

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

定義根腳本 check-examples 並將根目錄加入 test 的範例管線可能如下所示

./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 討論讓我們知道。

其他錯誤修正和改進

社群

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

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

此版本的發佈歸功於以下貢獻者:@gsoltis、@nathanhammond、@tknickman、@jaredpalmer、@zvictor、@ObliviousHarmony、@O4epegb、@rafaeltab、@mcmontseny、@bertspaan、@Jastor11 和 @enBonnet

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