菜单

发布渠道

相关源文件

本文档介绍了 React 的发布渠道系统,该系统允许 React 针对不同的用例分发库的不同版本。发布渠道有助于开发和测试新功能,同时保持生产应用程序的稳定性。有关 React 版本策略的信息,请参阅React 版本控制

概述

React 通过多个发布渠道分发代码,每个渠道在开发和发布周期中都有其特定目的。这种方法使 React 团队能够开发和测试新功能,同时提供稳定的版本供生产使用。

来源:scripts/rollup/bundles.js1-10 package.json119-149

渠道类型

React 提供了几种不同的发布渠道,每个渠道都有其自身的用途和稳定性保证。

稳定渠道

稳定渠道是发布到 npm 的 React 包的默认发布渠道。此渠道包含所有生产就绪功能并提供官方支持,遵循语义版本控制原则。建议大多数应用程序使用稳定渠道。

稳定渠道中的功能经过了彻底测试,被认为已准备好用于生产。破坏性更改仅在主要版本更新中引入,遵循语义版本控制规则。

实验渠道

实验渠道包含正在开发或测试中的未发布功能。此渠道中的功能在达到稳定版本之前可能会更改、损坏或完全移除。

实验渠道适用于

  • 早期功能测试
  • 提供对新 React 功能的反馈
  • 测试与即将到来的更改的兼容性
  • 准备 React 更新的框架维护者

来源:scripts/rollup/bundles.js4-8 package.json122-123 scripts/rollup/build.js32-37

Facebook 专用渠道

React 还维护了几个在 Meta 内部使用的 Facebook 专用渠道

  • www-modern:Facebook 网站的现代 React 功能
  • www-classic:用于向后兼容的旧版 React 功能

这些渠道包含 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用于开发和生产的 CommonJSNode.js
NODE_PROFILING带有性能分析钩子的 CommonJSNode.js 性能分析
FB_WWW_DEV, FB_WWW_PRODFacebook 专用捆绑包Facebook 网页端
RN_OSS_DEV, RN_OSS_PRODReact Native 开源捆绑包React Native OSS
RN_FB_DEV, RN_FB_PRODReact Native Facebook 捆绑包React Native FB

每种捆绑包类型都针对开发环境、生产优化和特性标志具有特定的配置。

来源:scripts/rollup/bundles.js10-54 scripts/rollup/build.js225-278

构建流程

React 的构建过程包含对不同发布渠道的特殊处理

  1. 构建过程由 scripts/rollup/build-all-release-channels.js 控制
  2. 使用 Rollup 打包工具为不同的发布渠道构建不同的捆绑包
  3. RELEASE_CHANNEL 环境变量控制启用哪些特性标志
  4. 每个包都有一个 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。

使用实验渠道

要使用实验渠道

  1. 使用实验标志从源代码构建

  2. 使用实验构建产物

这会生成可在您的应用程序中测试的实验构建版本。

来源:package.json147-148

针对不同渠道进行测试

React 提供了 npm 脚本用于针对不同的发布渠道进行测试

这些命令针对不同的发布渠道配置运行测试套件。

来源:package.json135-138

结论

React 的发布渠道系统提供了一种灵活的方式来分发库的不同版本以适应不同的用例。稳定渠道为生产应用程序提供了稳定性,而实验渠道则允许早期测试新功能。特性标志系统和构建过程协同工作,为每个发布渠道创建适当配置的捆绑包。

通过了解 React 的发布渠道如何运作,开发者可以根据自己的需求选择合适的版本,并通过测试实验功能来参与 React 的开发过程。