我在一个项目中实现了 CKEditor,我惊讶地发现,无论是在界面中还是在源代码中,它都是用 ECMA 6 编写的,使用了它的所有现代特性,例如短函数表示法(箭头函数)。
鉴于这些功能没有像 ECMA 5 版本那样得到广泛支持(截至今天,2018 年 7 月还没有),我问开发人员为什么做出这个战略选择:他们对广泛的浏览器兼容性不感兴趣吗?还是 CKEditor 传播得如此之好,以允许他们为现代浏览器版本指定一个精确的方向,从而冒着失去一部分用户的风险?
我在一个项目中实现了 CKEditor,我惊讶地发现,无论是在界面中还是在源代码中,它都是用 ECMA 6 编写的,使用了它的所有现代特性,例如短函数表示法(箭头函数)。
鉴于这些功能没有像 ECMA 5 版本那样得到广泛支持(截至今天,2018 年 7 月还没有),我问开发人员为什么做出这个战略选择:他们对广泛的浏览器兼容性不感兴趣吗?还是 CKEditor 传播得如此之好,以允许他们为现代浏览器版本指定一个精确的方向,从而冒着失去一部分用户的风险?
让我们在这里明确一点:
CKEditor 5 可以在它支持的所有浏览器中运行,无需任何转换。它支持的所有浏览器都有足够的 ES6 支持。
您可能想要将 CKEditor 5 从 ES6 转换为 ES5 的唯一原因是:
create-react-app
像 React ( ) 或 Angular ( ) 这样的框架的开发环境angular-cli
还没有赶上,仍然需要保存node_modules/
在 ES5 中的库。最后一种情况确实是一个更大的问题,因为您对这个环境的控制不如您自己的项目那么多。正如我在 Twitter 上评论的那样:
3 年前,我们决定 CKEditor 5 将在 ES6 中发布,因为我们计划支持的所有浏览器都应该由我们的 ETA 提供足够的 ES6 支持。
我们是对的——它在浏览器中工作得很好。
事实证明,问题出在没有赶上的构建环境(create-react-app、angular-cli)中。
我们需要引入 ES5 构建来满足这些环境;/
澄清一下——我不是在批评这些工具的作者。这更像是一种观察,我们一直担心浏览器支持,而今天这些工具阻止了我们。
而且,正如我在另一条推文中提到的那样,问题很广泛(例如,找到一个受支持的、稳定的、兼容 ES6+ 且快速的缩小器 - 参见例如https://github.com/webpack-contrib/uglifyjs-webpack-plugin/issues/ 262 ……)。
幸运的是,情况正在好转:
我认为 CRA 2.0 将发布未转译的代码,只是不知道发布有多远。抄送@dan_abramov
您可以尝试一些阿尔法。除此之外,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 在其生命周期的绝大部分时间里都不会成为问题。
CKEditor 也支持 vanilla javascript (ES5) 和 ES6。问题不在于编辑器,它只是支持它,不关心兼容性,因为它不知道您的代码将在哪里运行,而只知道如何突出显示并为您提供开发它的工具。
问题是,到那时,ECMA 标准正在大力发展,每个版本都在改进,所以有很多事情要做,每个月都会添加很多提案,有些通过并进入标准,后来进入了我们可以使用的很酷的功能,比如箭头功能。
所有这些都使浏览器更难捕捉到新的更新。即便如此,现在有很多支持新功能的功能(您可以跟踪该页面中的更新)。
无论如何,除此之外,您还可以使用像Babel这样的代码编译器(它将 ES6/ES7 编译成浏览器可以理解的代码,例如 ES5)。它被广泛采用,并被推荐用于它所做的事情:让您的生活更轻松。许多大公司都采用了它,例如 Facebook,它使用 react(并制作它)使用 Babel 不仅编译 ES6,还编译 JSX(检查这个)。
旁注:如果我需要编译器,为什么要使用 ES6?