我将如何编译
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
答案 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: