本文档介绍了 React 的发布渠道系统,该系统允许 React 针对不同的用例分发库的不同版本。发布渠道有助于开发和测试新功能,同时保持生产应用程序的稳定性。有关 React 版本策略的信息,请参阅React 版本控制。
React 通过多个发布渠道分发代码,每个渠道在开发和发布周期中都有其特定目的。这种方法使 React 团队能够开发和测试新功能,同时提供稳定的版本供生产使用。
来源:scripts/rollup/bundles.js1-10 package.json119-149
React 提供了几种不同的发布渠道,每个渠道都有其自身的用途和稳定性保证。
稳定渠道是发布到 npm 的 React 包的默认发布渠道。此渠道包含所有生产就绪功能并提供官方支持,遵循语义版本控制原则。建议大多数应用程序使用稳定渠道。
稳定渠道中的功能经过了彻底测试,被认为已准备好用于生产。破坏性更改仅在主要版本更新中引入,遵循语义版本控制规则。
实验渠道包含正在开发或测试中的未发布功能。此渠道中的功能在达到稳定版本之前可能会更改、损坏或完全移除。
实验渠道适用于
来源:scripts/rollup/bundles.js4-8 package.json122-123 scripts/rollup/build.js32-37
React 还维护了几个在 Meta 内部使用的 Facebook 专用渠道
这些渠道包含 Facebook 基础设施特有的定制内容,不适用于一般用途。
来源:package.json135-137 scripts/rollup/forks.js16-23
发布渠道通过构建过程中的 RELEASE_CHANNEL 环境变量进行配置。此环境变量决定启用哪些功能以及构建中包含哪些文件。
当 RELEASE_CHANNEL 设置为“experimental”时,实验功能将被启用。默认情况下(当未设置此环境变量时),React 以实验模式构建。
来源:scripts/rollup/bundles.js3-8 scripts/rollup/build.js30-37 scripts/rollup/forks.js20-27
React 使用复杂的特性标志系统,根据发布渠道启用或禁用功能。针对不同的环境和构建目标使用不同的特性标志配置。
特性标志系统使用文件路径“分叉(forking)”来根据目标环境和捆绑包类型提供不同的实现
这允许针对不同的环境(例如 React Native、Facebook 网站和 React 的开源版本)使用不同的特性标志集。
来源:scripts/rollup/forks.js133-190 scripts/rollup/build.js432-441
React 为不同的环境和发布渠道构建不同类型的捆绑包
| 捆绑包类型 | 描述 | 环境 |
|---|---|---|
| NODE_ES2015 | 用于 Node.js 的 ES2015 模块 | Node.js |
| ESM_DEV, ESM_PROD | 用于开发和生产的 ES 模块 | 打包工具 |
| NODE_DEV, NODE_PROD | 用于开发和生产的 CommonJS | Node.js |
| NODE_PROFILING | 带有性能分析钩子的 CommonJS | Node.js 性能分析 |
| FB_WWW_DEV, FB_WWW_PROD | Facebook 专用捆绑包 | Facebook 网页端 |
| RN_OSS_DEV, RN_OSS_PROD | React Native 开源捆绑包 | React Native OSS |
| RN_FB_DEV, RN_FB_PROD | React Native Facebook 捆绑包 | React Native FB |
每种捆绑包类型都针对开发环境、生产优化和特性标志具有特定的配置。
来源:scripts/rollup/bundles.js10-54 scripts/rollup/build.js225-278
React 的构建过程包含对不同发布渠道的特殊处理
scripts/rollup/build-all-release-channels.js 控制RELEASE_CHANNEL 环境变量控制启用哪些特性标志package.json 文件,用于定义可用的文件和入口点包准备过程会过滤掉在特定发布渠道中不可用的入口点
来源:package.json122 scripts/rollup/build.js546-688 scripts/rollup/packaging.js171-246
React 包使用 Node.js 的 “exports” 字段为不同的环境提供不同的入口点。这包括用于服务器渲染和 React Server Components 的特殊导出条件。
这使得框架和工具能够为当前环境使用适当的 React 版本,例如在服务器上运行时选择 React Server Components 版本。
来源:packages/react/package.json24-42 packages/react-dom/package.json51-125
从 npm 安装 React 时,稳定渠道是默认选项
这将安装最新稳定版本的 React 和 ReactDOM。
要使用实验渠道
使用实验标志从源代码构建
使用实验构建产物
这会生成可在您的应用程序中测试的实验构建版本。
React 提供了 npm 脚本用于针对不同的发布渠道进行测试
这些命令针对不同的发布渠道配置运行测试套件。
React 的发布渠道系统提供了一种灵活的方式来分发库的不同版本以适应不同的用例。稳定渠道为生产应用程序提供了稳定性,而实验渠道则允许早期测试新功能。特性标志系统和构建过程协同工作,为每个发布渠道创建适当配置的捆绑包。
通过了解 React 的发布渠道如何运作,开发者可以根据自己的需求选择合适的版本,并通过测试实验功能来参与 React 的开发过程。