HaxeでつくるWebアプリ開発(node.js + Express) | 深追い Fukaoi.org を参考に、haxenodeを使ってみたときにハマったこと。

```as rootnode.hx
import js.Node;

class RootNode {
static function main() {
var server = Node.http.createServer( function(
req:NodeHttpServerReq, res:NodeHttpServerResp){
res.setHeader(“Content-Type”,”text/plain”);
res.writeHead(200);
res.end(Hoge.print());
}
);

    server.listen(1337,"localhost");
    trace( 'Server running at http://127.0.0.1:1337/' );
   	}	 }

@:keep
@:expose
class Hoge {
public static function print():String {
return “Hello World.\n”;
}
}
```

こんな感じでサンプル作って、

node rootnode.js

を実行したところ、

/…/bin/haxenode.js:53
var o = window;
^
ReferenceError: window is not defined
at $hxExpose (/…/bin/haxenode.js:53:10)
at /…/bin/haxenode.js:13:1
at Object. (/.../bin/haxenode.js:62:3) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10) at process.startup.processNextTick.process._tickCallback (node.js:244:9)

こんなエラーが出ました。

いろいろ試したところ、Hoge クラスに @:keep@:expose をどちらも指定するとダメみたい。どちらか片方だけなら正常。
–dead-code-elimination をあきらめて、minify とかすればいいのかな。
@:keep@:expose は意味が被る、というか expose は keep を包括するような感じなので、@:expose だけでよさそうな気もします。

##参考

haxe
Node.js
haxenode

published

Ads

Read more!

amay077

Microsoft MVP(Xamarin). フルリモートワーカー. Geospatial Mobile app developer. Love C#.

amay077 amay077