React Router v7 已發布。 查看文件
開發策略

使用 Future Flags 逐步採用新功能

在我們的軟體開發方法中,我們旨在為主要版本實現以下目標:

  1. 漸進式功能採用:開發人員可以靈活地選擇並逐步整合新功能和變更,這些功能和變更會在目前的主要版本中提供。這與將所有變更綑綁到單一新主要版本的傳統方法不同。
  2. 無縫版本升級:透過提前有選擇地整合新功能,開發人員可以順利過渡到新的主要版本,而無需修改現有的應用程式程式碼。

不穩定的 API 和 Future Flags

我們會在目前版本中引入新功能,並使用類似於 unstable_someFeature 的 future flag。您可以在 Remix Vite 外掛程式的 future 選項中,於您的 vite.config.ts 檔案中指定這些旗標。

import { vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    remix({
      future: {
        unstable_someFeature: true,
      },
    }),
  ],
});

如果您尚未在使用 Vite,則可以透過 remix.config.js future 選項提供 Future Flags。

  • 一旦不穩定的功能達到穩定狀態,我們會移除特殊的前置詞,並將該功能納入下一個次要版本。此時,API 的結構在後續的次要版本中會保持一致。

  • 這種方法允許我們與早期採用者共同改善 API,在不穩定階段納入必要的變更,而不會影響所有使用者。然後,穩定版本會從這些改進中受益,而不會造成中斷。

  • 如果您正在使用標有 unstable_* 旗標的功能,請務必查看每個次要版本的版本資訊。這是因為這些功能的行為或結構可能會演變。您在此階段的回饋對於在最終發布之前增強功能至關重要!

使用 Future Flags 管理重大變更

當我們引入重大變更時,我們會在目前主要版本的環境中進行,並將其隱藏在 future flag 後面。例如,如果我們在 v2 中,則重大變更可能會放在名為 v3_somethingDifferent 的 future flag 下面。

import { vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";

export default defineConfig({
  plugins: [
    remix({
      future: {
        v3_someFeature: true,
      },
    }),
  ],
});
  • 現有的 v2 行為和新的 v3_somethingDifferent 行為會同時共存。
  • 應用程式可以逐步採用變更,一次一步,而不是必須在下一個主要版本中一次適應多個變更。
  • 如果啟用了所有 v3_* future flag,則轉換到 v3 應該理想上不需要對您的程式碼庫進行任何變更。
  • 一些導致重大變更的 future flag 最初以 unstable_* 旗標開始。這些旗標可能會在次要版本中進行修改。一旦它們變成 v3_* future flag,對應的 API 就會設定,且不會再變更。

摘要

我們的開發策略側重於逐步採用功能和主要版本的無縫版本升級。這使開發人員能夠有選擇地整合新功能,避免在版本轉換期間需要進行大量的程式碼調整。透過引入 unstable_* 旗標的功能,我們與早期採用者共同改善 API,同時確保穩定版本從增強功能中受益。透過使用 v3_* 旗標仔細管理重大變更,我們提供了逐步採用變更的彈性,有助於在主要版本之間進行更順暢的轉換。雖然這增加了開發 Remix 框架的複雜性,但這種以開發人員為中心的做法大大簡化了使用 Remix 的應用程式開發,最終提高了軟體品質,並(希望!)提高了開發人員的滿意度。

文件和範例依授權 MIT