给 CodeSandbox 提 PR 是一种怎样的体验

前言

本文分享我给 CodeSandbox 提 PR 并被 merged 的体验……

为什么给 CodeSandbox 提 PR

今年 5 月份由于部门组织架构调整,我的工作内容从 TikTok 直播活动方向变为直播电商方向。

基于电商场景的特殊性,页面的性能和体验非常重要,包括极短的首屏渲染时间、流畅的长列表交互等方面,因此我们抛弃了传统 WebView 的开发模式,转而使用字节自研的跨端框架 Lynx 进行业务开发。

所以我尝试去了解跨端技术的实现原理,让自己对跨端有更全面的认知,更好地 Cover 业务需求。

像 React Native 之类的跨端框架,为了实现超越 WebView 的性能体验,它的核心是弃用浏览器内核这套渲染模式,界面最终都会被渲染为原生控件,而非浏览器上的 DOM.

同时为了对齐 Web 的开发体验,React Native 允许我们用 Flexbox 进行布局,这在 CSS 中是家常便饭,但要知道 iOS 和 Android 可不支持这玩意儿,一般 iOS 使用 AutoLayout,Android 使用 LinearLayout.

为了解决这一难题,Facebook 开源了跨平台布局引擎(Layout Engine)Yoga.

Yoga 由 C/C++ 编写,可编译至各平台运行,除了支持 Flexbox Layout,还支持 position, margin, padding, height, width, aspect-ratio.

既然是跨平台,那么同样支持 Web,我写了个 Demo for Yoga Web: codesandbox.io/s/yoga-layo…,强烈建议学习该 demo 以了解 Yoga 的运行模式,将会加深你对布局引擎和 Flexbox 的理解。

铺垫了这么多,终于进入正题了,我使用了当前最热门、最稳定的 Web IDE: CodeSandbox 作为演示,如果你在 Chrome 上打开 Demo 链接,一切都能正常运行,如图所示:

可当我在本地运行时,yoga-layout 这个包始终无法正常下载,导致项目无法运行。

WFT! 还有这么诡异的现象,我的第一反应便是去翻 Yoga issues,其中一个 issue: github.com/facebook/yo… 找到了我想要的答案,大意是 NodeJS v10 才支持 yoga-layout,而我使用的 NodeJS 版本是 v14.19.3,怪不得安装失败

看来 CodeSandbox 提供的 React 项目模板默认使用 Node v10,于是,我想着能不能在 CodeSandbox 上直接修改 Node 版本,答案是可以,根据官网文档的 FAQ 显示:

官方表示对于 container sandboxes,你可以通过修改 sandbox.config.json 来达到指定运行的 NodeJS 版本,且它们的默认版本均为 v10.20.1.

在 sandbox 左侧 Configuration Files 一栏中可创建并修改 sandbox.config.json,例如:

{
  "container": {
    "node": "12"
  }
}

注意 container sandboxes 与一般的 React、Vue sandboxes 不同,它们是纯粹的 Node 应用,下图中选择 「universal」 或 「Node HTTP Server」 才可创建 container sandbox.

以选择 「Node HTTP Server」 为例,点击 「+」号新建一个 Terminal,NodeJS 版本却显示 v14.19.3.

这我可纳闷了,怎么文档和真实情况不一样,我立马连夜给 CodeSandbox 提了 PR: docs: Update default Node version in container sandbox #6750,表示 FAQ 文档叙述有误。

CodeSandbox 的团队成员非常热心得告诉我,为了实现向后兼容(新系统能兼容老数据),在 2021.5.10 之前创建的 container sandbox 依旧使用 v10,而之后创建的 container sandbox 则使用 v14.

所以官网文档没有描述清楚其中的历史原因,才让我有了疑惑,经过 Compulves 的指导,我修改了 PR 并再次提交。

Merged #6750 into master.

经过一番操作,最终官网的 FAQ 文档关于 Node version 的描述得以完善补充。

写在最后

从研究 React Native 跨端原理到给 CodeSandbox 提 PR,这八竿子打不着的两个东西,由于我紧追不舍的好奇心,被强行联系到了一起。

虽然 Commit 不涉及真正的代码,只是文档层面的修复,但这种感觉真的很奇妙,整个过程即为开源做了贡献,又让自己排查问题的能力得到提升。

从此,在 CodeSandbox Github 主页就能看我的头像啦。

猜你喜欢

转载自juejin.im/post/7124912454009618445
PR