编译成 ES6?

Compiling to ES6?

我将如何编译

export default User
import socket from "./socket"

这个 ES6 javascript 函数与 haxe?

import socket from "./socket"
let User = {
    init(socket, element) {
        if (!element) {
            return
        }
        let userId = element.getAttribute("data-id")
        userId= Math.random()
        socket.connect()
        this.onReady(userId, socket)
    }
}
export default User

不久前我也有同样的需求,以便与 Ember 2.0/Ember CLI 集成。我没有找到使用纯 Haxe 的方法,唯一的选择是:

1) 构建自定义 js 生成器 - 笨拙,因为你失去了内置 js 生成器的优点,因为 没有 精细控制你使用的功能 - 全部或什么都没有——也就是说,你不能只改变 AST 中某个 expression/type 的输出,你不能引用内置生成器并在需要时委托给它。

2) 解析 hx 文件的预处理器,删除 ES6 代码,编译文件,然后添加回 ES6 代码,虽然笨重,但可能会工作。

3) 破解编译器的 OCAML 代码并添加某种 class 级别的元数据标记,例如 @:ESImport("import {foo} from bar")@:ESExport("export default foo")。这也可以通过#1(自定义 js 生成)来完成,但是通过修改 OCaml 代码,您可以保留内置的 js 生成。

我暂时放弃了将 Haxe 代码与 ES6 集成,我希望 Haxe 对 ES6(即 ES2016 生成器)有更好的内置支持,或者为 JS 自定义生成器提供更细粒度的挂钩 API .

作为参考,这是我发给 Haxe 邮件列表的关于这个问题的消息:https://groups.google.com/forum/#!topic/haxelang/jSTkkaNgfB8

4.0.0-rc.2 开始,Haxe 现在支持使用 -D je-es=6 标志生成 ES6 类。

有了这个,这个例子...

class Main {
    static function main() {
        trace("Hello World");
    }
}

...生成以下 JavaScript 代码:

// Generated by Haxe 4.0.0-rc.2+43ed6c9b4
(function ($global) { "use strict";
class Main {
    static main() {
        console.log("source/Main.hx:3:","Hello World");
    }
}
Main.main();
})({});

//# sourceMappingURL=run.js.map

计划进一步支持 ES6: