修复开源项目中一行 CSS 代码的经验总结

Avatar of Benjamin Schachter
Benjamin Schachter

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

我正在我的 iPhone 上浏览 Svelte 文档,偶然发现了一个明显的 UI 错误。REPL 旋钮上的缺口完全偏离了位置。我一直想为开源项目做出贡献,我认为这会是一个快速简单的修复。事实证明,它不仅仅是更改一行 CSS 代码那么简单。

复制、调试和设置本地环境很有趣、很困难,也很有意义。

问题

我打开了浏览器的开发者工具,以为会在手机视图中看到同样的问题。但是,错误消失了。现在这是一个非常棘手的 CSS 问题。

💡 我学到了什么

如果您在 iOS 上使用 Chrome 作为浏览器,您仍然在使用 Safari 的渲染引擎。来自 维基百科

Chrome 使用 iOS WebKit——它是 Apple 为其 Safari 浏览器开发的自己的移动渲染引擎和组件——因此它无法使用 Google 自身的 V8 JavaScript 引擎。

caniuse 也证实了这一点,它在 iPS Safari 上提供了以下说明

Screenshot of caniuse with a note saying the safari browser for iOS is tried to the operating system, so the numbers used are based on the OS version.

现在很清楚为什么问题在我的机器上没有出现,但在我的手机上出现了。不同的渲染引擎!

在本地重现问题

我下载了 项目并在本地运行它。我通过在 模拟器以及我的实际 iPhone 上运行本地代码确认它仍然存在问题。macOS 上的 Safari 提供了一种简单的方法来打开每个模拟器的 DevTools 实例。

Screenshot of the Safari Develop menu expanded with the Simulator option highlighted in blue.

这提供了与在浏览器中相同的控制台访问权限,但适用于 iOS Safari。我不会撒谎,Apple 的开发体验一流(看到我做了什么?😬)。

我现在能够在本地重现问题了。

💡 我学到了什么

在下载 Svelte 存储库并在代码中查看了一段时间后,我注意到 UI 和 SVG 是通过一个名为 @sveltejs/site-kit 的包引入的。太好了,现在我需要我的本地版本的 site kit 被拉入 svelte/site,这样我就可以查看更改并调试问题。

我需要将 Svelte 的 package.json 中的 node_modules 指向我的本地 site-kit 副本。这听起来像一个 符号链接。在查看文档后没有找到太多有用的信息,我在 Google 上搜索了一番,并 偶然发现npm-link。这让我看到了自己的操作!

我现在可以对 site-kit 进行本地更改,并在 Svelte 项目中看到这些更改。

解决问题

说真的,这只需要一行更改

border: transparent;

但是找到应该在哪里添加这行代码并不像你想的那样简单。项目的源代码映射还有一些问题,它显示这个 CSS 来自 Nav.svelte 组件,而实际上它来自另一个文件。这也是为项目做贡献的好方法!

然后你四处搜索并了解到这个问题正在被 处理,你了解了更多关于它是如何完成的。现在手机和桌面上的所有内容看起来都很好。

这就是它所需要的!

让我们回顾一下

最初只是一个快速的一行更改,却变成了一段旅程。我不得不

  • 运行项目和组件存储库
  • 了解系统链接
  • 为 site-kit 贡献链接方面的文档
  • 了解不同的浏览器渲染引擎
  • 学习如何模拟 iOS Safari 浏览器
  • 学习如何访问其调试器
  • 在源代码映射无法正常工作时找到问题
  • 修复问题(最终!)

当你独自工作时,你通常不会遇到这样的问题,或者需要构建一个复杂系统的思维模型并进行学习。你无法向维护人员学习。最重要的是,你无法看到构建一个受欢迎的技术产品所付出的所有努力。

当我向 CSS-Tricks 提交这个想法时,Chris 说他最近也遇到了类似的情况。**艰难的学习是持久的学习。**拥抱奋斗。

永不停止学习

我从 Svelte 项目中获取了另一个问题,现在我正在学习 CSSStyleSheet,因为还有一个问题(我认为),关于 Safari 如何处理 stylemanager.ts 中的关键帧动画。因此,学习继续沿着我日常工作中从未涉足的道路前进。

当某些东西出现故障时,享受学习系统的过程。您将获得宝贵的见解,了解该故障的原因以及可以采取哪些措施来修复它。这是参与开源项目的一大好处,也是我鼓励您也这样做的原因。