【问题标题】:Why CKEditor does not care about compatibility?为什么 CKEditor 不关心兼容性?
【发布时间】:2018-07-07 14:07:16
【问题描述】:

我在一个项目中实现了 CKEditor,我惊讶地发现,无论是在界面中还是在源代码中,它都是用 ECMA 6 编写的,使用了它的所有现代特性,例如短函数表示法 (arrow functions)。

鉴于这些功能没有像 ECMA 5 版本那样得到广泛支持(截至今天,2018 年 7 月还没有),我想问开发人员为什么做出这个战略选择:他们对广泛的浏览器兼容性不感兴趣吗?还是 CKEditor 传播得如此之好,以允许他们为现代浏览器版本指定一个精确的方向,从而冒着失去一部分用户的风险?

【问题讨论】:

标签: javascript ckeditor compatibility versioning ckeditor5


【解决方案1】:

浏览器不是问题

让我们在这里说清楚:

CKEditor 5 可以在它支持的所有浏览器中运行而无需任何转译。它支持的所有浏览器都有足够的 ES6 支持。

为什么需要 ES5?

您可能想要将 CKEditor 5 从 ES6 转换为 ES5 的唯一原因是:

  • 它不支持的旧版浏览器(至少目前是这样)。
  • 使用 ES6 不兼容的 JS 缩小器 (UglifyJS) 的现有设置。在此类应用程序中包含 CKEditor 5 可能有点不方便,但正如已经评论的那样,我们explain how to transpile CKEditor 5 to ES5
  • React (create-react-app) 或 Angular (angular-cli) 等框架的开发环境尚未赶上,但仍要求 node_modules/ 中保存的库位于 ES5 中。

最后一种情况确实是一个更大的问题,因为您对这个环境的控制不如您自己的项目那么多。作为I commented on Twitter

3 年前我们决定 CKEditor 5 将在 ES6 中发布,因为我们计划支持的所有浏览器都应该有我们的 ETA 足够的 ES6 支持。

我们是对的——它在浏览器中运行得很好。

原来问题出在构建环境(create-react-app、angular-cli)没有赶上。

我们需要引入 ES5 构建来满足这些环境;/

澄清一下——我并不是在批评这些工具的作者。这更像是一种观察,我们一直担心浏览器支持,而今天这些工具阻止了我们。

而且,正如我在另一条推文中提到的,问题很广泛(例如,找到一个受支持的、稳定的、兼容 ES6+ 且快速的缩小器 - 参见例如 https://github.com/webpack-contrib/uglifyjs-webpack-plugin/issues/262 ...)。

幸运的是,情况正在好转:

@mtrebizan:

我认为 CRA 2.0 将发布未转译的代码,只是不知道发布有多远。抄送@dan_abramov

@dan_abramov:

您可以尝试一些 alpha。除此之外,ETA 是社区实现它的时候 ? 有积极的工作,你也可以提供帮助

我知道 angular-cli 也有改善这种情况的工作。所以,在较短的时间内,一切也应该顺利进行。

时间方面

ES6 和 ES5 之间的差异(在功能方面)是巨大的。早在 2014 年,当我们开始 CKEditor 5 开发时,我们选择了 ES5。 ES6 还没有标准化。

但是,情况在 2015 年发生了变化。ES6 发布了,我们的测试证明我们期待的所有功能(类、生成器、迭代器、弱集、弱映射等)都已在 Chrome 中可用。我们决定去看看。

大约 1.5 年后,CKEditor 5 在所有现代浏览器中都可以原生运行(没有任何转译)(Safari 除外,它有一个严重的错误)。同时,babel-minify 变得可用,因此我们不必将 CKEditor 5 转译为 ES5,甚至用于生产。

现在是 2018 年,障碍物的数量减少得更多。今年仍有可能您不必将 CKEditor 5 转换为 ES5,除非您的项目由于浏览器支持而应该是 ES5(但是,为什么要包含 CKEditor 5?它无论如何都不会在那些浏览器中工作) )。

纵观 CKEditor 3-4 的历史,CKEditor 5 将伴随我们接下来的 8 年多。所以,我们在这里谈论的是 2026+。这意味着 ES6 在其生命周期的大部分时间里都不会成为问题。

【讨论】:

    【解决方案2】:

    CKEditor 也支持 vanilla javascript (ES5) 和 ES6。问题不在于编辑器,它只是支持它,不关心兼容性,因为它不知道您的代码将在哪里运行,而只知道如何突出显示并为您提供开发它的工具。

    问题是,到那时,ECMA 标准正在大力开发,每个版本都在改进,所以有很多事情要做,每个月都会添加很多提案,一些通过并进入标准,后来成为我们可以使用的很酷的功能,比如箭头函数。

    所有这些都让浏览器更难捕捉到new updates。尽管如此,还是有很多supports the new features now(您可以在该页面中跟踪更新)。

    无论如何,除此之外,您还可以使用Babel 之类的代码编译器(将 ES6/ES7... 编译成浏览器可以理解的代码,例如 ES5)。它被广泛采用,并被推荐用于它所做的事情:让您的生活更轻松。许多大公司都采用了它,例如 Facebook,它使用 react(并制作)使用 Babel 不仅编译 ES6,还编译 JSX(check this)。

    旁注:如果我需要编译器,为什么要使用 ES6?

    https://itnext.io/why-you-should-use-es6-56bd12f7ae09

    【讨论】:

    • 你写了“它不知道你的代码将在哪里运行”:任何客户端应用程序都可以检查它正在运行的平台,或者,更好,因为它暴露的功能。此外,当您说 “(它知道)仅如何突出显示并为您提供开发它的工具时” 我不确定我们指的是相同的论点:CKEditor 是一个所见即所得的编辑器,而不是语法荧光笔。然后:“所有这些都让浏览器更难捕捉到新的更新” 这就是我的观点,事实上,浏览器兼容性是一个可靠的网络应用程序的一个很好的特性,正因为如此。
    • 编译可以帮助我理解您的观点:“无论如何,除此之外,您还可以使用像 Babel 这样的代码编译器(将 ES6/ES7... 编译到浏览器可以理解的代码,例如 ES5)": 好的,但是发布的源代码是 ES6,快速入门指南建议如何使用它,而不是如何将其编译成更受支持的版本,或者我错过了它。
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2017-02-07
    相关资源
    最近更新 更多