React Router v7 已发布。 查看文档
开发策略

使用未来标志逐步采用功能

在我们的软件开发方法中,我们旨在为主要版本实现以下目标

  1. 增量功能采用: 开发人员可以灵活地选择和集成新功能和更改,这些功能和更改在当前主要版本中可用。这与将所有更改捆绑到单个新主要版本中的传统方法不同。
  2. 无缝版本升级: 通过提前有选择地合并新功能,开发人员可以平稳过渡到新的主要版本,而无需修改其现有的应用程序代码。

不稳定 API 和未来标志

我们使用类似于 unstable_someFeature 的未来标志将新功能引入当前版本。您可以在 vite.config.ts 文件的 Remix Vite 插件 future 选项中指定这些标志

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 选项提供未来标志

  • 一旦不稳定的功能达到稳定状态,我们将删除特殊前缀,并将该功能包含在下一个次要版本中。此时,API 的结构在后续次要版本中保持一致。

  • 这种方法使我们能够与早期采用者协作改进 API,在不影响所有用户的情况下在不稳定阶段进行必要的更改。然后,稳定版本从这些改进中受益,而不会造成中断。

  • 如果您正在使用标有 unstable_* 标志的功能,则务必查看每个次要版本的发行说明。这是因为这些功能的行为或结构可能会发生变化。在此阶段您的反馈对于在最终发布之前增强功能非常宝贵!

使用未来标志管理重大变更

当我们引入重大变更时,我们会在当前主要版本的上下文中进行,并将其隐藏在未来标志之后。例如,如果当前版本是 v2,则可以将重大变更放在名为 v3_somethingDifferent 的未来标志下。

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_* 未来标志,则过渡到 v3 理想情况下不应需要对代码库进行任何更改。
  • 一些引起重大变更的未来标志最初以 unstable_* 标志的形式出现。这些标志可能会在次要版本中进行修改。一旦它们成为 v3_* 未来标志,相应的 API 将被确定,并且不会再更改。

总结

我们的开发策略侧重于逐步采用功能和主要版本的无缝升级。这使开发人员能够有选择地集成新功能,从而避免在版本转换期间进行大量的代码调整。通过 unstable_* 标志引入功能,我们与早期采用者协作改进 API,同时确保稳定版本受益于增强功能。通过使用 v3_* 标志仔细管理重大变更,我们提供了逐步采用变更的灵活性,从而促进了主要版本之间的更平稳过渡。虽然这增加了开发 Remix 框架的复杂性,但这种以开发人员为中心的方法极大地简化了使用 Remix 的应用程序开发,最终提高了软件质量和(希望!)开发人员的满意度。

文档和示例在以下许可下发布 MIT