这个帖子将与从事框架、库或开发者工具的开发者最相关。那些主要使用React来构建面向用户的应用程序的开发者应该不需要担心我们的预发布渠道。
React依靠一个繁荣的开源社区来提交错误报告、开放拉动请求和提交RFCs。为了鼓励反馈,我们有时会分享React的特殊构建,包括未发布的功能。
因为React的真实来源是我们公开的GitHub仓库,所以一直以来都有可能构建一个包含最新变化的React副本。然而对于开发者来说,从npm安装React要容易得多,所以我们偶尔会在npm注册表上发布预发布版本。最近的一个例子是16.7 alpha,其中包括Hooks API的一个早期版本。
我们希望让开发者更容易测试React的预发布版本,所以我们正在用三个独立的发布渠道正式确定我们的流程。
发布渠道
这篇文章中的信息也可以在我们的发布渠道页面上找到。只要我们的发布流程有变化,我们就会更新该文件。
React的每一个发布渠道都是为不同的使用情况设计的。
- 最新的是为稳定的、semver的React版本。这是你从npm安装React时得到的东西。这是你今天已经在使用的频道。所有面向用户的 React 应用程序都使用这个频道。
- 下一个追踪 React 源代码库的主分支。把它看作是下一个小semver版本的候选版本。使用它来进行React和第三方项目之间的集成测试。
- 实验性的包括实验性API和稳定版中没有的功能。这些也是跟踪主分支,但开启了额外的功能标志。使用它可以在即将发布的功能之前进行尝试。
所有的版本都发布到npm,但只有Latest使用语义版本。预先发布的版本(Next和Experimental通道中的版本)是由其内容的哈希值生成的,例如:Next是0.0.0-1022ee0ec ,Experimental是0.0.0-experimental-1022ee0ec 。
对于面向用户的应用程序,官方支持的唯一发布渠道是Latest。Next和Experimental版本仅用于测试目的,我们不保证不同版本之间的行为不会改变。它们不遵循我们对最新版本所使用的semver协议。
通过将预发布版本发布到与稳定版本相同的注册表,我们能够利用许多支持npm工作流程的工具,如unpkg和CodeSandbox。
最新频道
Latest是用于稳定React发布的频道。它与npm上的latest 标签相对应。它是所有React应用的推荐通道,这些应用将被运送给真正的用户。
**如果你不确定你应该使用哪个频道,那就是Latest。**如果你是一个React开发者,这是你已经在使用的。
你可以期待Latest的更新是非常稳定的。版本遵循语义化的版本计划。在我们的版本政策中了解更多关于我们对稳定性和增量迁移的承诺。
下一个通道
Next 频道是一个预发布频道,跟踪 React 仓库的主分支。我们将 Next 频道中的预发布版本作为 Latest 频道的候选版本。你可以把Next看作是Latest的一个超集,它的更新频率更高。
最新的Next版本和最新的Latest版本之间的变化程度与你在两个次要的semver版本之间发现的变化大致相同。然而,**Next频道并不符合语义上的版本划分。**你应该期待在Next频道的连续版本之间偶尔会有一些突破性的变化。
请不要在面向用户的应用程序中使用预发布。
Next中的版本是用npm上的next 标签发布的。版本是由构建内容的哈希值生成的,例如:0.0.0-1022ee0ec 。
使用下一个通道进行集成测试
Next 频道旨在支持 React 与其他项目之间的集成测试。
React的所有变化在发布给公众之前都要经过广泛的内部测试。然而,在整个React生态系统中,有无数的环境和配置,我们不可能针对每一个环境进行测试。
如果你是第三方React框架、库、开发者工具或类似基础设施类型项目的作者,你可以帮助我们为你的用户和整个React社区保持React的稳定性,定期针对最新的变化运行你的测试套件。如果你有兴趣,请遵循以下步骤。
-
在 cron job 中,使用 npm 上的
next标签,将你的 React 包更新到 Next 频道中最新的 React 版本。使用npm cli。npm update react@next react-dom@next或yarn。
yarn upgrade react@next react-dom@next -
针对更新后的软件包运行你的测试套件。
-
如果一切都通过了,那就好了!你可以期待你的项目将与下一个次要的React版本一起工作。
-
如果有什么意外的故障,请通过提交问题让我们知道。
Next.js就是一个使用这种工作流程的项目。(没有双关的意思!真的!)你可以参考他们的CircleCI配置作为一个例子。
实验性渠道
和Next一样,实验频道是一个预发布频道,跟踪React仓库的主分支。与Next不同,Experimental版本包括尚未准备好广泛发布的额外功能和API。
通常,对Next的更新会伴随着对Experimental的相应更新。它们基于相同的源代码修订版,但使用不同的功能标志集构建。
实验性版本可能与Next和Latest版本有很大的不同。**不要在面向用户的应用程序中使用实验性版本。**你应该期待在实验性频道的版本之间有频繁的突破性变化。
实验版的发布是在npm上用experimental 标签发布的。版本是由构建内容的哈希值生成的,例如:0.0.0-experimental-1022ee0ec 。
实验性发布有哪些内容?
实验性功能是那些还没有准备好向更广泛的公众发布的功能,在它们最终完成之前可能会有很大的变化。有些实验可能永远不会被最终确定--我们之所以有实验,是为了测试提议的变化的可行性。
例如,如果实验频道在我们宣布Hooks的时候就已经存在,那么我们会在Hooks在最新版本出现之前的几周将其发布到实验频道。
你可能会发现针对Experimental运行集成测试是很有价值的。这由你决定。然而,请注意,Experimental比Next更不稳定。我们不保证实验版之间的任何稳定性。