跳转到内容

Development Strategy

使用 Future Flags 逐步采用新功能

在我们的软件开发方法中,我们致力于实现主要版本的以下目标:

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

不稳定的 API 和未来的标志

我们使用类似于unstable_someFeature的未来标志将新功能引入当前版本。您可以在 vite.config.ts 文件中的 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 管理重大变更

当我们引入重大变更时,我们会在当前主要版本的背景下进行,并将其隐藏在未来标志后面。例如,如果我们处于v2中,重大变更可能会被放置在名为v3_somethingDifferent的未来标志下。

vite.config.ts
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 进行应用程序开发,最终提高了软件质量和(希望!)开发人员满意度。