为什么CKEditor不关心兼容性?

时间:2018-07-07 14:07:16

标签: javascript ckeditor compatibility versioning ckeditor5

我在一个项目上实现了CKEditor,我惊讶地发现,无论是在界面中还是在源代码中,它都是使用ECMA 6编写的,它使用了所有现代功能,例如短功能符号(arrow functions )。

鉴于这些功能尚未得到广泛支持(因为ECMA 5版本已被支持)(截至今天,2018年7月),我想问一下开发者为何做出这一战略选择:他们对广泛的浏览器兼容性不感兴趣吗?还是CKEditor的普及程度如此之高,以至于它们可以为现代浏览器版本提供精确的方向,从而有可能失去一部分用户?

2 个答案:

答案 0 :(得分:4)

浏览器不是问题

让我们在这里明确

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中。 / li>

最后一种情况确实是一个更大的问题,因为您对这个环境的控制没有您自己的项目那么大。为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将交付未翻译的代码,只是不知道发布的距离有多远。 cc @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年,障碍的数量减少了更多。除非您的项目由于支持浏览器而被假定为ES5,否则今年仍然有可能无需将CKEditor 5转换为ES5(但是,为什么要包括CKEditor 5?无论如何在这些浏览器中都无法使用) )。

回顾CKEditor 3-4的历史,CKEditor 5将在未来8年以上与我们在一起。因此,我们在这里谈论的是2026年以上。这意味着ES6在其生命周期的绝大部分时间内都不会出现问题。

答案 1 :(得分:3)

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

问题是,到那时,ECMA标准正在大量开发中,每个版本都有所改进,因此,正在进行的工作很多,每个月都添加了很多提案,有些提案通过并通过了该标准,后来又引入了一些很酷的功能,例如箭头功能。

所有这些使浏览器更难抓住new updates。即使如此,supports the new features now还是很多(您可以在该页面中跟踪更新)。

无论如何,除了所有这些之外,您还可以使用诸如Babel之类的代码编译器(它将ES6 / ES7 ...向下编译为浏览器可以理解的代码,例如ES5)。它被广泛采用,并推荐用于其用途:使您的生活更轻松。许多大公司都采用了它,例如Facebook,它使用Babel使用react(并使其)来编译ES6和JSX(check this)。

  

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

     

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