跳到主要内容

React Native 2019年6月开源更新

· 阅读需 9 分钟
Christoph Nakazawa
Christoph Nakazawa
Former Engineer @ Facebook

代码与社区健康状况

在过去六个月中,超过550名贡献者向 React Native 提交了总计2800次提交。社区中有400名贡献者创建了超过 1,150个拉取请求(Pull Requests),其中有 820个拉取请求被合并。

在过去六个月中,平均每天的拉取请求数量已从3个增加到约6个,尽管我们通过 Lean Core 计划将网站、CLI 和许多模块从 React Native 中拆分出去。现在平均未处理拉取请求数量低于25个,我们通常在数小时或几天内回复并提出建议和审查意见。

有意义的社区贡献

我们想特别强调一些我们认为非常棒的近期贡献:

Lean Core 计划

Lean Core 的主要动机是将模块从 React Native 中拆分至独立仓库,以便获得更好的维护。在短短六个月内,WebViewNetInfoAsyncStorage网站CLI 这几个仓库合计收到了超过800个拉取请求。除了更好的维护外,这些项目还能比 React Native 主体更频繁地独立发布。

我们也趁机从 React Native 中移除了过时的 polyfill 和遗留组件。过去,为支持老版本 JavaScriptCore (JSC) 中的语言特性如 MapSet,必须使用 polyfill。现在 React Native 捆绑的是更新版本,因此这些 polyfill 被删除。

这项工作仍在进行中,原生与 JavaScript 两边还有许多内容需要拆分或删除,但已有迹象表明我们成功扭转了代码体积持续增长的趋势:比如查看 JavaScript bundle 大小,一年前的 0.54 版本为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之后的升级大为简化。
  • 支持与不确定性: 众多用户对拉取请求缺乏活动及 Facebook 在 React Native 上投入的不确定感到挫败。正如前文所示,我们可以自信地说,我们已准备好迎接更多拉取请求,期待您的提议和贡献!
  • 性能: React Native 0.59 推出了全新更快的 JavaScriptCore (JSC) 版本。另外,我们一直致力于让默认启用 inline-requires 更加容易,接下来几个月还将带来更多激动人心的更新。
  • 文档: 我们近期启动了 全面重写 React Native 文档的工作。如果你想贡献文档,非常欢迎!
  • Xcode 警告: 我们已经 清理掉所有现存警告,并努力避免引入新的警告。
  • 热重载: React 团队正在开发 全新热重载系统,即将集成进 React Native。

遗憾的是,我们尚未能解决所有问题:

  • 调试: 我们修复了许多日常遇到的不便问题,但调试体验仍未达到理想水平。我们意识到调试 React Native 体验较差,未来会优先改进。
  • Metro 符号链接支持: 目前尚未找到简单直接的解决方案。不过,React Native 用户分享了各种可行的解决方案,或许能帮到你。

鉴于过去半年变化巨大,我们再次向你提问。如果您正在使用最新版本 React Native 并愿意反馈意见,请在我们新一期的 “你不喜欢 React Native 的哪些方面?” 话题下留言。

持续集成

Facebook 首先将所有拉取请求及内部更改合并至其私有仓库,然后将所有提交同步回 GitHub。Facebook 的基础设施与常见持续集成服务不同,且非所有开源测试都在 Facebook 内部完成。这导致同步到 GitHub 的提交经常会出现测试失败,修复耗费大量时间。

React Native 团队的 Héctor Ramos 过去两个月一直在改进 Facebook 和 GitHub 上的持续集成系统。现在大部分开源测试都在提交变更至 React Native Facebook 版本前运行,这将保持 GitHub 同步提交时的持续集成稳定。

接下来

务必关注我们关于 React Native 未来发展的演讲!未来几个月,Facebook React Native 团队成员将出席 Chain ReactReact Native EU 会议。同时,敬请期待即将发布的 0.60 版本。令人振奋