我在一个项目上实现了CKEditor,我惊讶地发现,无论是在界面中还是在源代码中,它都是使用ECMA 6编写的,它使用了所有现代功能,例如短功能符号(arrow functions )。
鉴于这些功能尚未得到广泛支持(因为ECMA 5版本已被支持)(截至今天,2018年7月),我想问一下开发者为何做出这一战略选择:他们对广泛的浏览器兼容性不感兴趣吗?还是CKEditor的普及程度如此之高,以至于它们可以为现代浏览器版本提供精确的方向,从而有可能失去一部分用户?
答案 0 :(得分:4)
让我们在这里明确
CKEditor 5可以在其支持的所有浏览器中运行,而无需进行任何编译。它支持的所有浏览器都具有足够水平的ES6支持。
您可能想将CKEditor 5从ES6移植到ES5的唯一原因是:
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…)。
幸运的是,情况正在改善:
我认为CRA 2.0将交付未翻译的代码,只是不知道发布的距离有多远。 cc @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?