ECMAScript:Harmony / ES6 to JavaScript编译器

在阅读Peter关于JavaScript的文章后,我注意到了

Brendan Eich指出,Harmony的目标之一是成为JavaScript编译器的更好的目标。

目前有两个stream行的编译器有一些模糊的ES:和谐合规:

  • Traceur
  • CoffeeScript的

虽然CoffeeScript有一些合规性,但它并不是ES:Harmony编译器,所以它没有用处。

Tracuer似乎更严格地坚持ES:Harmony规范,但我不知道它是否打算成为一个完整的ES:Harmony编译器。

由于目标是将ES6编译为ES3,因此还需要支持ES5function(可能是将ES5编译为ES3还是将ES6编译为ES3的开关)。

  1. 目前是否有其他项目旨在创build一个完整的ES:与ES3编译器和谐?
  2. 知道标准是年轻/不稳定/不断变化,开始编写这样一个编译器是明智的。
  3. 目前是否有任何ES5 – > ES3编译器?

我在Traceur邮件列表上留下了一个问题。

这样的编译器的目的是向后兼容ES3。 ES3中没有完全模拟ES5和ES6。

Continuum已经实现了大部分的相关function,并且应该在es3浏览器中运行(比如较老的IE)。

(无耻,但相关的插件下面)

Caja正在通过ES5 / 3改进其ES5支持,并将为ES和谐做同样的事情。 因此,我们的结构将被实现为ES3层的一个和谐层,可以跳过真正的和声实现,然后是一个可分离的加载程序,保留caja的安全属性。

像Traceur一样,Caja团队的成员是TC39(ES Harmony定义委员会)的一部分。

我不知道Coffeescript的计划,但是在和谐模块的讨论中提到了它。 模块加载器可能有拦截加载的源代码(通过eval钩子 )并在模块初始化之前重写它的能力,所以如果一个模块被写入CoffeeScript中,可以在初始化时调用运行时的CoffeeScript重写器。 这将允许应用程序由多种语言编写的模块组成,这些模块可以在加载时编译为和声。

有一点需要注意的是,并非所有的和谐都可以通过翻译来轻松实现。 例如,正确地实现弱映射需要在JavaScript中实现自己的垃圾收集器,即使你这样做了,你可能会重新引入宿主对象/本机对象循环问题。

检查TypeScript ,微软的基于ES6的新语言。

睫毛膏可能是你在找什么。

在打字的时候,我们现在有了巴别塔 。 它集成了许多不同的构build工具/系统,并将ES6 +转换为支持传统的浏览器(它没有说明它的目标是哪个版本,但它确实表示它的目标是IE9 +)。

要安装它,inputnpm install babel -g

请注意,它有相当多的依赖关系,安装时是〜23.4 MB(2888个文件)。

Google Closure Compiler ( Github )是ES6编译的好工具。 这是一个简单的Java jar,从命令行使用。 还有其他选项,如API服务和GUI,但是我发现最好设置一个自动构build系统挂接到Java JAR中。 它可以将ES6代码转换成ES5兼容代码。 我开始使用它来压缩和混淆代码,但它也可以进行错误检查和ES6转换,正如我所提到的。

请注意,ES6function被标记为实验性的。 但我打算很快将它们用于生产,因为我的testing是稳定的。

还有https://github.com/matthewrobb/six

六是JavaScript的语言超级集合,使第六版ECMAScript中的新语法function可以通过一个转译器在您的脚本中使用。

警告 :仍然处于非常早的状态,谨慎行事。

我不确定在什么情况下编译回ES3会比ES5更有价值,因为实现更改仅限于数组和对象帮助函数,并且ES5支持非常普遍 。

为了完整起见,另一个ES6到ES5编译器是Square的esnext项目。 它是一些模块的集合,旨在多个填充一个包中提供的各种ES6function。 这里是包含的列表模块: https : //github.com/square/esnext#available