跳至主要内容

React Native 开源更新 2019 年 6 月

·阅读时间:8 分钟
Christoph Nakazawa
Christoph Nakazawa
Facebook 前工程师

代码与社区健康

在过去的六个月中,React Native 共收到了来自 550 多位贡献者的 2800 次提交。社区中的 400 位贡献者创建了超过 1150 个 Pull Request,其中 820 个 Pull Request 已合并。

在过去的六个月中,每天的平均 Pull Request 数量从 3 个增加到大约 6 个,即使我们通过精简核心工作将网站、CLI 和许多模块从 React Native 中分离出来。现在平均未处理的 Pull Request 数量低于 25 个,我们通常会在几小时或几天内回复建议和审查。

有意义的社区贡献

我们想重点介绍一些我们认为非常棒的最新贡献

精简核心

精简核心 的主要动机是将模块从 React Native 分离到单独的存储库中,以便它们能够获得更好的维护。仅仅六个月,像 WebViewNetInfoAsyncStorage网站CLI 这样的存储库共收到了 800 多个 Pull Request。除了更好的维护之外,这些项目还可以比 React Native 本身更频繁地独立发布。

我们还借此机会从 React Native 本身中删除了过时的 polyfill 和遗留组件。过去,polyfill 是必要的,用于支持旧版 JavaScriptCore (JSC) 中的语言特性,例如 MapSet。现在 React Native 附带了新版本,因此这些 polyfill 已被删除。

这项工作仍在进行中,在原生端和 JavaScript 端仍有许多内容需要拆分或移除,但早期迹象表明我们成功扭转了 React Native 表面积和应用大小不断增长的趋势:例如,在查看 JavaScript 包时,大约一年前的 0.54 版本中,React Native JavaScript 包大小为 530kb,并在短短 6 个月内增长到 0.57 版本的 607kb(+77kb)。现在,我们在 master 分支上看到包大小减少了 28kb,降至 579kb,减少了超过 100kb!

随着 Lean Core 工作的第一轮迭代结束,我们将努力更加有意地规划添加到 React Native 中的新 API,并持续评估使 React Native 更小更快的方法,以及寻找赋予社区拥有各种组件的方法。

用户反馈

六个月前,我们向社区提出了问题“你对 React Native 不满意的地方是什么?”,这让我们很好地了解了人们面临的问题。我们在几个月前回复了该帖子,现在是总结在主要问题上取得的进展的时候了。

  • 升级:React Native 社区积极参与,对升级体验进行了多项改进:自动链接、通过 rn-diff-purge 提供更好的升级命令、以及即将推出的升级助手网站。我们还将确保通过为每个主要版本发布博文来传达重大更改和激动人心的新功能。许多这些改进将使未来 0.60 版本之后的升级变得更加容易。
  • 支持/不确定性:许多人对 Pull Request 活动的缺乏以及 Facebook 对 React Native 投资的不确定性感到沮丧。正如我们上面所展示的,我们可以自信地说,我们已准备好处理更多 Pull Request,并且我们热切期待您的建议和贡献!
  • 性能:React Native 0.59 发布了新版且速度更快的 JavaScriptCore (JSC)。另外,我们一直在努力使默认启用 内联 require 变得更加容易,并且在未来几个月内我们将为您提供更多令人兴奋的更新。
  • 文档:我们最近开始努力 彻底检修和重写所有 React Native 的文档。如果您想贡献,我们非常乐意得到您的帮助!
  • Xcode 中的警告:我们 消除了所有现有的警告,并且正在努力避免引入新的警告。
  • 热重载:React 团队正在构建一个 新的热重载系统,该系统很快将集成到 React Native 中。

不幸的是,我们还没有能够改进所有内容。

  • 调试:我们修复了许多人们每天都会遇到的不便的错误和问题,但不幸的是,我们在调试方面取得的进展并不如我们希望的那么大。我们认识到使用 React Native 进行调试并非完美,我们将优先考虑在未来改进这一点。
  • Metro 符号链接:不幸的是,我们还没有能够为此实现一个简单直接的解决方案。但是,React Native 用户 分享了各种解决方法,这些方法可能对您有用。

鉴于过去六个月的大量更改,我们想再次向您提出同样的问题。如果您正在使用最新版本的 React Native,并且您有任何想提供反馈的内容,请在我们的新版 “你对 React Native 不满意的地方是什么?” 中发表评论。

持续集成

Facebook 首先将所有 Pull Request 和内部更改合并到 Facebook 的存储库中,然后将所有提交同步回 GitHub。Facebook 的基础设施与常见的持续集成服务不同,并且并非所有开源测试都在 Facebook 内部运行。这意味着同步到 GitHub 的提交经常会破坏开源中的测试,而修复这些测试需要花费大量时间。

Héctor Ramos 来自 React Native 团队,过去两个月一直在改进 Facebook 和 GitHub 上的 React Native 持续集成系统。现在,大多数开源测试都在将更改提交到 Facebook 的 React Native 之前运行,这将使 GitHub 上的 CI 在同步提交时保持稳定。

接下来

一定要查看我们关于 React Native 未来发展的演讲!在接下来的几个月里,Facebook 的 React Native 团队成员将在 Chain ReactReact Native EU 上发表演讲。此外,请关注我们的下一个版本 0.60,它即将发布。这将令人兴奋