43

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

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

目前有两种流行的编译器,它们的ES:Harmony合规性有些模糊:

尽管 CoffeeScript 有一些合规性,但它并不是为 ES:Harmony 编译器而设计的,因此它对此没有用处。

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

由于目标是将 ES6 编译为 ES3,因此还需要支持 ES5 功能(并且可能需要切换是将 ES5 编译为 ES3 还是将 ES6 编译为 ES3)。

  1. 目前是否还有其他项目旨在创建完整的 ES:Harmony to ES3 编译器?
  2. 知道标准是年轻/不稳定/不断变化的,开始编写这样的编译器是否明智。
  3. 当前是否有任何 ES5 -> ES3 编译器?

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

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

4

8 回答 8

14

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

Caja正在通过ES5/3修改其对 ES5 的支持,并将为 ES 和谐做同样的事情。所以我们的结构将被实现为一个 Harmony to ES3 层,可以跳过真正的和谐实现,然后是一个可分离的加载器,它保留了与 caja 相关的安全属性。

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

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

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

于 2011-06-28T17:52:03.350 回答
11

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

于 2012-12-26T07:35:53.920 回答
8

Continuum已经实现了大部分相关功能,应该可以在 es3 浏览器(如旧版 IE)中运行。

于 2013-01-15T16:51:13.503 回答
4

睫毛膏可能是您正在寻找的。

于 2011-07-01T02:32:07.470 回答
4

截至打字时,我们现在有Babel。它与许多不同的构建工具/系统集成,并将转译 ES6+ 以支持旧版浏览器(它没有说明它针对哪个版本,但它确实说它针对 IE9+)。

要安装它,请键入npm install babel -g.

请注意,它有很多依赖项,安装时约为 23.4 MB(2888 个文件)。

于 2015-07-02T11:11:55.673 回答
3

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

请注意,ES6 功能被标记为实验性的。但我计划很快在生产中使用它们,因为我的测试非常可靠。

于 2014-11-12T22:26:30.917 回答
1

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

Six 是 JavaScript 的语言超集,它使 ECMAScript 第 6 版中的新语法功能能够通过转译器在您今天的脚本中使用。

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

于 2013-05-24T15:22:58.677 回答
0

我不确定在哪个实例编译回 ES3 比 ES5 更有价值,因为实现更改仅限于数组和对象辅助函数,并且ES5 支持如此普遍

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

于 2014-07-23T20:27:09.677 回答