我是一名开发人员,最近开始使用 Gutenberg。有很多令人惊叹的优点和功能,但也有很多缺点、不一致以及绝对糟糕和过时的文档。

从开发人员的角度来看,古腾堡最糟糕的方面之一是块验证。考虑以下场景。我构建了一个基于 JavaScript 的自定义(非动态)块,CMS 编辑器将该块添加到数千个页面。当我需要更新块的标签时会发生什么?

默认情况下,所有块都会进入无效状态,不会反映在网站前端。 CMS 编辑器必须进入数千页并手动单击允许恢复该块的按钮。

有些人建议使用 block deprecations 来解决这个问题,但是 API 的文档很差,令人困惑,而且如果长期使用多次 deprecation 似乎会变得无法维护。

区块开发者是否应该没有办法选择退出验证过程,或者是否有全局的方法来恢复区块?

PJ

PJ,你当然什么都没留下。虽然其中很多内容比我通常在酒馆里介绍的内容更具技术性,但我还是决定联系 Gutenberg 的主要开发人员之一 Riad Benguella 以了解更多信息。

在深入探讨他的回答之前,我已经对您问题的一个方面进行了一些思考。有时开发人员需要弃用旧标记并迁移到新标记。但是,这不应该经常发生。一般来说,如果 HTML 需要定期检修,那是架构不佳的标志。这也会导致其他问题,例如第三方无法持久化样式更改。

在开发块或任何类型的输出前端代码的应用程序时,您需要考虑今天与十年后的情况。如果用户添加一些自定义 CSS 来设置代码块的样式,并且代码块的 HTML 结构发生变化,会发生什么情况?从他们的角度来看,您的区块更新破坏了他们的网站。另一个以某种方式扩展您的插件的插件也可以这样说。

问问任何主题作者,当 Gutenberg/WordPress 改变他们的块输出时,他们有多沮丧。尽管在过去几年中有所改进,但编辑器和前端的样式块通常是维护起来的噩梦。

作为一名开发人员,我一直试图从用户的角度思考所有这些实际变化的后果。这应该从第一天开始,而不是在发布项目之后。

当您试图将项目发布并交到用户手中时,这样做会增加早期项目的时间。这是在发布之前退后一步会有所帮助的地方。远离电脑。走出去,想想你的项目架构,从长远来看它是否理想。

Benguella 表示:“对于块版本控制/更新,这实际上是 Gutenberg API 的领域之一,我们需要在架构方面做出权衡,我们决定偏向于用户体验,而不是开发人员。”

p>

无论您采用哪种开发方法,从长远来看,遵循用户至上的体验方法对您的项目都是有效的。

“要正确理解问题,您需要了解块的工作原理以及如何编辑它们,”Benguella 说。 “块实例是编辑器 UI 操作的 JSON 对象,但为了保持后兼容,确保用户内容以尽可能最易读的格式保存,并尽可能采用 Web 标准,块编辑器不存储 JSON 对象,而是将它们的 HTML 序列化存储在 post_content 中。在解析的最后阶段,由区块作者决定如何保存和解析对象。

“现在,想象一下,如果用户更改了保存的 HTML(序列化),然后将任何随机内容放入其中,”Benguella 说。 “该块可能无法正确解析 HTML,因为它不符合预期(由块作者定义),这意味着此时无法重新创建 JSON 对象进行操作。”

当发生这种情况时,块编辑器提供了一个界面供用户做出明智的决定。他们可以尝试“强制解析”JSON 块或将其转换为 HTML 或经典块。

更改标签后无效块。

当插件开发人员更新他们的块时,可能会发生相同类型的失效。然而,开发人员没有更改保存的 HTML,而是更改了块“期望”的内容——更改了它的保存和解析方式。

“这就是为什么我们要求区块开发人员提供代表同一区块的旧标记的区块弃用,”Benguella 说。 “弃用也可以被视为同一块的有效替代来源。,编辑器可以在加载时解析旧标记,并在对块进行更新时将新标记保存回来。”

WordPress 有块弃用文档。然而,这还不完整。在现实世界中看到折旧的最佳来源是通过古腾堡的块库。弃用的块有一个 deprecated.js 文件。

Benguella 表示,该系统可能会让大型游戏作者感到沮丧。这在进行更改的开发环境中尤为明显。这导致开发人员寻求一种禁用验证算法的方法。

“我们目前不想提供该功能,因为如上所述,当标记因其他原因(外部编辑、其他编辑等)而更改时,验证也很重要,”他说. “因此,如果用户不理解任何内容,可能会导致用户丢失内容。用户意识现在是重中之重。”

随着时间的推移,团队改进了验证系统,允许小的更改不会中断模块状态。将来还会有一个开放的改进票。

喜欢这样:

喜欢正在加载...

来源