开发策略

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

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

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

不稳定 API 和未来标志

我们使用类似于 unstable_someFeature 的未来标志将新功能引入当前版本。您可以在 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 选项提供未来标志

  • 一旦不稳定功能达到稳定状态,我们将删除特殊前缀并在下一个次要版本中包含该功能。此时,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