返回部落格

Turborepo 1.4

2022 年 8 月 9 日,星期二
Greg Soltis
姓名
Greg Soltis
X
@gsoltis
Nathan Hammond
姓名
Nathan Hammond
Tom Knickman
姓名
Tom Knickman
X
@tknickman
Anthony Shew
姓名
Anthony Shew
X
@anthonysheww
Jared Palmer
姓名
Jared Palmer
X
@jaredpalmer
Mehul Kar
姓名
Mehul Kar
X
@mehulkar

Turborepo 1.4 帶來

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

自動環境變數包含

為了協助確保跨環境的正確快取,Turborepo 現在會在計算使用 Astro、Create React App、Gatsby、Next.js、Nuxt、SvelteKit、Vite、Vue 和更多工具建置的應用程式的快取金鑰時,自動推斷並包含公開的環境變數。如果先前您已手動宣告了框架特定的公開環境變數,您可以安全地從 turbo.json 中移除它們。

turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": [
        "^build"
-       // Include build time public inlined environment variables that
-       // are different in development and production, so that
-       // Turborepo does not use the same cached build
-       // across environments
-       "$NEXT_PUBLIC_EXAMPLE_ENV_VAR"
      ]
    }
  }
}

請注意,只有在 Turborepo 成功推斷出您的應用程式所使用的框架時,此自動偵測和包含才會生效。此外,環境變數只會包含在使用該框架的工作區中的工作快取金鑰中。換句話說,針對 Next.js 應用程式推斷的環境變數,只會包含在偵測為 Next.js 應用程式的工作區的快取金鑰中。單一程式碼庫中其他工作區的工作不受影響。

例如,考慮一個具有三個工作區的單一程式碼庫:一個 Next.js 專案、一個 Create React App 專案和一個 TypeScript 套件。每個都有一個 build 指令碼,且兩個應用程式都依賴於 TypeScript 專案。假設此 Turborepo 具有一個標準的 turbo.json 管道,依序建置它們

turbo.json
{
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
    },
  },
}

從 1.4 版開始,當您執行 turbo run build 時,Turborepo 在建置 TypeScript 套件時將不會考慮任何相關的建置時間環境變數。然而,在建置 Next.js 應用程式時,Turborepo 將推斷以 NEXT_PUBLIC_ 開頭的環境變數可能會變更 .next 資料夾的輸出,因此在計算雜湊時應將其包含在內。同樣地,在計算 Create React App 的 build 指令碼的雜湊時,所有以 REACT_APP_PUBLIC_ 開頭的建置時間環境變數都將包含在內。

此框架雜湊特異性的改進是朝向最佳、安全和正確快取邁出的重要一步。

eslint-config-turbo

我們還建立了一個新的 ESLint 設定,以進一步在編輯器中提供協助,以確保您的 Turborepo 快取可以在每個環境中正確共享。雖然我們的新雜湊演算法應該涵蓋大多數框架的大多數情況,但此 ESLint 設定將為使用其他未加上框架前綴但會影響建置輸出(即快取)的建置時間內嵌環境變數的團隊,以及使用我們無法自動偵測的自有內部框架的團隊,提供編輯器內的回饋。

若要開始使用,請在您的根 eslintrc 檔案中延伸自 eslint-config-turbo

.eslint.config.js
{
  // Automatically flag env vars missing from turbo.json
  "extends": ["next/core-web-vitals", "turbo"],
}

如果您偏好對規則有更多控制權,則可以先將 eslint-plugin-turbo 外掛程式新增至外掛程式,然後設定所需的規則,來直接安裝並設定該外掛程式

.eslint.config.js
{
  "extends": ["next/core-web-vitals"],
  "plugins": ["turbo"],
  "rules": {
    // Automatically flag env vars missing from turbo.json
    "turbo/no-undeclared-env-vars": "error",
  },
}

如果您在程式碼中使用未在您的 turbo.json 中宣告的非框架相關環境變數,此外掛程式將會向您發出警告。

從 1.4.x 版開始,我們現在在我們所有的範例以及透過 npx create-turbo 產生新的專案中都包含 eslint-config-turbo

請參閱 ESLint 文件,進一步了解 ESLint 設定和外掛程式。

新的框架和函式庫範例

根據您的回饋和建議,我們建立了新的範例,將 Turborepo 整合到您的工作流程中

其他錯誤修正和改進

社群

自從六月發布 Turborepo v1.3 以來,我們看到了令人難以置信的採用和社群成長

Turborepo 是我們所有貢獻者(包括我們的核心團隊)共同努力的成果。

此版本的發布歸功於以下貢獻者:@B2o5T、@chitchu、@elis、@gsoltis、@harshcut、@jaredpalmer、@kocisov、@nathanhammond、@neolivz、@NuroDev、@oneezy、@samouri、@shayc、@StevenMatchett、@tknickman、@trevorr、@zsoldosp 等等!

感謝您持續的支持、回饋和協作,讓 Turborepo 成為您首選的建置工具。