编译成ES6?

时间:2016-05-15 10:48:40

标签: haxe

我将如何编译

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

2 个答案:

答案 0 :(得分:1)

为了与Ember 2.0 / Ember CLI集成,我实际上已经有了同样的需求。我没有找到纯粹Haxe的方法,唯一的选择是:

1)构建一个自定义的js生成器 - 笨重,因为你失去了内置js生成器的好处,因为没有精细控制你使用的功能 - 它'全部或全部 - 即您不能仅更改AST中某个表达式/类型的输出,并且您无法引用内置生成器并在需要时委托给它。

2)一个解析hx文件的预处理器,删除ES6代码,编译文件,然后添加ES6代码,笨拙,但可能有效。

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

我现在已经放弃了将Haxe代码与ES6集成,我希望Haxe能够更好地支持ES6(即ES2016生成器)或JS Custom Generator API的更细粒度的钩子。

作为参考,这是我向Haxe邮件列表发送的有关此问题的信息:https://groups.google.com/forum/#!topic/haxelang/jSTkkaNgfB8

答案 1 :(得分:0)

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: