2013-01-02 100 views
4

使用node.js和Haxe,有什麼方法可以編寫一個從Haxe文件生成node.js模塊的函數,然後返回生成的模塊?我開始使用Haxe編寫node.js模塊,並且我需要一種更容易導入模塊的方法。將Haxe模塊導入node.js腳本

function requireHaxe(variableToRequire, haxeFileLocation){ 
    //generate a JavaScript module from the Haxe file, and then return the generated JavaScript module 
} 
+0

這個問題不應該太難解決 - 我只需要找到一種方法來從node.js運行Haxe編譯器,獲取生成的JavaScript文件的名稱,然後導入生成的JavaScript文件。 –

+1

可以使用Haxe生成node.js模塊,如下所述:https://groups.google.com/forum/#!topic/haxelang/6lzIeg6RUC4 –

+0

在node.js中,還可以同步執行系統命令。 http://stackoverflow.com/questions/4443597/node-js-execute-system-command-synchronously –

回答

5

考慮這個

//Haxenode.hx 

class Haxenode { 
    @:expose("hello") 
    public static function hello(){ 
    return "hello"; 
    } 
} 

@:expose("hello")部分是把東西module.exports

現在啓動

haxe -js haxenode.js -dce no Haxenode 

現在你可以在的NodeJS使用haxenode.js

var haxenode = require('./haxenode.js'); 
var hello = haxenode.hello; 

所以,這個組合在一起是一個回答你的問題:

var cp = require('child_process'); 

function requireHaxe(haxeClassPath,cb){ 
    //generate a JavaScript module from the Haxe file, and then return the generated JavaScript module 

    cp.exec('haxe -js haxenode.js -dce no ' + haxeClassPath,function(err){ 
     if (err){ 
      cb(err); return; 
     } 

     cb(null,require('./haxenode.js')); 
    }); 
} 

記住,輸出文件名是一個存根。

但是不要這麼做 - 最好在構建步驟(包含所有必要的編譯選項)下編譯haxe,然後在運行時使用常規require