跳至主要內容

相依性版本升級

更新

我們依靠 Renovate 機器人 自動使用 此組態,產生公關來更新我們的相依性。

相依性資訊面板

Renovate 會根據 依存關係資訊面板問題 進行設定,以了解工具狀態。

  • 什麼依存關係升級需要批可否決以更新(例如因為它們是主要升級)?
  • 哪些依存關係升級正在進行中(例如待處理)?
  • 哪些依存關係升級目前為開啟狀態且正在等待檢閱及合併。?
    • 請注意,Renovate 是非同步工具,因此合併公關後,此清單將會稍微落後。
  • 已忽略哪些依存關係升級?

在此問題中勾選核取方塊,Renovate 會對依存關係採取行動。

  • 如果您勾選「待批准」清單中的其中一個方框,它將批准它,而且 Renovate 會提出一個公關。
  • 如果您勾選「待狀態檢查」清單中的其中一個方框,它將使 Renovate 在其內部狀態檢查完成前建立公關。
  • 如果您勾選「開啟」清單中的其中一個方框,它將使 Renovate 重新調整公關的基礎(如果沒有手動變更)或重新建立公關(如果有手動變更)。
  • 如果您勾選「已忽略或已封鎖」清單中的其中一個方框,將導致 Renovate 重新建立公關。

合併 Renovate 的公關

Renovate 不會自動合併其依賴關係公關,因為我們已啟用分支保護。Renovate 公關必須經過與人類公關相同的工作流程:即所有公關都必須在合併前通過狀態檢查並獲得批准。

如果與 main 發生衝突,Renovate 將自動更新公關。您也可以透過勾選公關說明中的方塊或勾選依賴關係資訊面板中的相關方塊來強制重新調整公關基礎。

您通常應避免按一下 Github UI 中的「更新分支」按鈕,因為這會建立一個人類提交─它會造成 Renovate 將分支視為「骯髒的」,它將不再自動。只有在您計畫盡快手動合併公關時才按一下它。

手動依賴關係更新

偶爾,最好在單一提交中手動提升依賴關係,而不是依賴 Renovate 的多個公關。這只要以下列方式執行即可:

  1. git checkout main && git pull
  2. yarn install
  3. yarn update-interactive ─這將啟動 yarn 的提示來更新依賴關係。
    1. 忽略有 * 的行,因為這些已故意設定成這樣。
    2. 避免變更依賴範圍,例如,TypeScript 我們有一個複雜的範圍 (例如 >=4.7.4 <5.5.0)。
    3. 準備好之後,按一下enter ,yarn 將進行變更並重新執行安裝。
  4. 在提出 PR 前於本地執行所有相關檢查,以便在出現任何錯誤時採取相應措施
    1. yarn build
    2. yarn typecheck
    3. yarn lint
    4. yarn test
    5. yarn integration-test
  5. 建立新分支(名為 update-deps-20231201 的名稱結構會比較好,以維持其唯一性),建立並建立 PR。

Babel

我們已發布的套件僅將 @babel/* 套件作為 devDependencies。您通常可以使用以下方式升級這些依存關係:

  1. yarn add -D @babel/code-frame @babel/core @babel/eslint-parser @babel/parser @babel/types
  2. npx nx run ast-spec:test -u

packages/ast-spec/ 下的 fixtures 描述檔案在 Babel 和我們的(TSESTree)解析器下的解析方式。

ESLint

typescript-eslint 儲存庫包含四種針對 eslint 套件的版本範圍:

  • 整合性測試:固定到我們最低支援的 ESLint 版本
  • 具有 * peerDependency 版本的套件:這些套件會回退至明確的 peerDependency 版本
  • 具有明確 peerDependency 版本的套件:支援的 ESLint 主要版本完整範圍
  • 根目錄中的 package.jsondevDependency:較新的版本,僅用於儲存庫開發
提示

每當您發現放棄舊版 ESLint 版本後會阻礙任何新的工作領域(例如新的 ESLint API 棄用),請加入一個 TODO 註解,該註解會被 移除對舊版 ESLint 版本的相容性 下的正規表示法所擷取。

新增對新版 ESLint 版本的相容性

  1. 將根目錄中的 package.json devDependency 升級至最新的 ESLint
  2. 將新的主要版本新增至明確的 peerDependency 版本
  3. 查看 eslint-visitor-keys,看看是否也有新的版本需要升級。
  4. 更新 使用者 > 依賴關係版本 > ESLint

移除對舊版 ESLint 的支援

  1. 將整合測試提高到下一個最低支援的主要版本 (*.0.0)
  2. 從有明確的 peerDependency 版本的套件中移除舊的主要版本
  3. 搜尋原始程式碼附註 (排除 CHANGELOG.md 檔案),當中提到現在不受支援的 ESLint 版本。
    • 例如,若要移除對 v5 的支援,搜尋可能包括
      • /eslint.*5/i
      • /todo.*eslint.*5/i
      • /todo.*eslint/i
  4. 更新 使用者 > 依賴關係版本 > ESLint

請參閱 chore: 放棄支援 ESLint v6 以供參考。

Node

typescript-eslint 儲存庫包含三種 Node 的版本範圍

  • .github/workflows/ci.ymlPRIMARY_NODE_VERSION:設定為我們支援的最高 Node 版本
  • node-version:設定為範圍為 [最低, 最高] 的版本集合,供 CI 中的單元測試使用
  • 所有 package.json 中的 engines 欄位:明確地列出所有受支援的 Node 範圍

在新增支援新版 Node 或是移除對舊版 Node 的支援時,請適當變更這些數字。

請參閱 feat: 放棄支援 node v12 + chore: 在 ci.yml 測試 node v14 以供參考。

TypeScript

新增對新版 TypeScript 的支援

我們通常會在新版 TypeScript 的第一個 beta 版發布後,才開始支援該新版本的處理作業。

  1. 建立並固定一個議題,舉標題為 支援 TypeScript X.Y,並標籤為 accepting prsASTdependencies、和 New TypeScript Version,內容如下

    1. 連結至 Microsoft 議題追蹤器中的 TypeScript X.Y 迭代計畫 議題

    2. 下列文字

      This issue is just to track all of the new features and their implementation state in this project.
      As with all releases, we will not necessarily support all features until closer to the full release when everything the features are stabilised.

      _Please be patient._ ❤️
    3. 對於迭代計畫中會對我們造成影響的每個新版 TypeScript 功能,使用 🔲 開頭標題

    4. 標題為 🔲 lib.d.ts 更新,內容為 我們需要在 scope-manager 中重新產生我們的型別

    5. 標題為 其他對我們沒有影響的變更,其中列出我們認為不會對我們造成影響的其他變更清單

  2. 在這個階段,傳送和/或檢視實作必要功能的公關請求 (PR) 是沒問題的,但是等到新的 TypeScript 版本的候選版本發佈後再合併它們

    • 每當建立 PR 時,新增 (#1234) 到各自的標題,並且將標題的貼圖從 🔲 更改為 🏗
    • 搜尋 expectBabelToNotSupport 以了解如何支援 Babel 尚未支援的語法
  3. 當 TypeScript RC 版本發佈後,開始合併 PR

    • 每當合併 PR 時,將各自標題的貼圖從 🏗 更改為 ✅
  4. 建立一個 PR,其標題例如 feat: 更新 TypeScript 至 X.Y-rc,並且有下列變更

    • 在根目錄 package.json 中,新增 || X.Y.1-rc2typescriptdevDependency
    • 在解析器的 getLib 中,視需要更新 switch (target) 及其前面的註解(見 #6782
    • SUPPORTED_TYPESCRIPT_VERSIONS 常數的 < 版本變更為下一個 TypeScript 版本
    • SUPPORTED_PRERELEASE_RANGES 常數變更為等於 ['X.Y.1-rc']
    • patches/typescript* 重新命名並更新為新的 TypeScript 版本
    • 執行 yarn generate-lib 以更新 scope-manager
  5. 當所有需要的 PR 合併到 RC 更新 PR 後,合併 RC 更新 PR

  6. 當 TypeScript 發佈穩定的 X.Y 版本後,建立並合併一個 PR,其標題例如 chore: 將 TypeScript 從 X.YRC 升級至 X.Y,並且有下列變更

    • 在根目錄 package.json 中,從 typescriptdependency 中移除 || X.Y.1-rc2,並且將其 < 版本升級至下一個 TypeScript 版本
    • 在根目錄 package.json 中,將 typescriptresolutions 變更為 X.Y.3
    • patches/typescript* 重新命名並更新為新的 TypeScript 版本
    • 因 RC 版本與穩定版本中 TypeScript 變更而產生的其他必要變更
  7. 傳送一個 PR,更新這個文件頁面以便指向較新的議題和 PR

    • 如果你採取不同的程序,也更新其中的任何步驟

相關參考(注意:這些不遵循此處描述的確切程序)

移除對舊版 TypeScript 版本的支援

單一 PR 可以將移除對舊版 TypeScript 版本的支援視為中斷性變更

  1. 更新根目錄 package.json devDependency
  2. 更新 warnAboutTSVersion.ts 中的 SUPPORTED_TYPESCRIPT_VERSIONS 常數
  3. 更新 version-check.ts 中的 versions 常數
  4. 更新 使用者 > 相依版本 > TypeScript
  5. 更新 packages/website/src/components/OptionsSelector.tsx 中的 MIN_TS_VERSION_SEMVER
  6. 搜尋提到現已不支援的 TypeScript 版本的原始碼註解 (排除 CHANGELOG.md 檔案)。
    • 例如,如果要移除對 v4.3 的支援,搜尋可能包含
      • 4.3
      • /is.*4.*3/i
      • /semver.*4.*3/i
      • /semver.satisfies/
      • /todo.*ts/i
      • /todo.*typescript/i

請參閱 feat: bump 最低支援的 TS 版本至 4.2.4