【问题标题】:Compiling to ES6?编译成 ES6?
【发布时间】:2016-05-15 10:48:39
【问题描述】:

如何编译

export default User
import socket from "./socket"

这个带有 haxe 的 ES6 javascript 函数?

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

【问题讨论】:

    标签: haxe


    【解决方案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 自定义生成器 API 挂钩。

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

    【讨论】:

    【解决方案2】:

    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:

    【讨论】:

      猜你喜欢
      • 2016-12-31
      • 2016-09-23
      • 2016-08-24
      • 1970-01-01
      • 2015-10-25
      • 1970-01-01
      • 2016-07-01
      • 2019-07-12
      • 2018-12-22
      相关资源
      最近更新 更多