2016-12-13 79 views
0

我嘗試包括此build,在我的瀏覽器JS用Node.js的,這裏是我的服務器代碼:的ReferenceError用Node.js和受Browserify

var fs = require("fs"); 
var http = require("http"); 
var url = require("url"); 

http.createServer(function (request, response) { 

    var pathname = url.parse(request.url).pathname; 
    console.log("Request for " + pathname + " received."); 

    response.writeHead(200); 

    if(pathname == "/") { 
     html = fs.readFileSync("views/index.html", "utf8"); 
     response.write(html); 
    } else if (pathname == "/ethereumjs-all.js") { 
    script = fs.readFileSync("views/ethereumjs-all.js", "utf8"); 
     response.write(script); 
    } 
    response.end(); 
}).listen(8000); 

console.log("Listening to server on 8000..."); 

這裏是index.html內容:

<html> 
    <head> 
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
    <script src="/ethereumjs-all.js"></script> 
    <script> 
    $(document).ready(function() { 
    var tx = new Transaction() 
    ... 
    }); // document.ready 
    </script> 
    </head> 
    <body></body> 
</html> 

但是,在瀏覽器控制檯中,我收到錯誤ReferenceError: Transaction is not defined庫應該有Transaction類定義。那麼我使用browserify是否錯誤?

感謝您的幫助!

+0

凡定義的'Transaction'構造? –

+0

@DaveGomez實際上我不確定,但代碼在服務器端工作..現在我檢查了[ethereumjs-tx.js](https://github.com/ethereumjs/browser-builds/blob/master/ dist/ethereumjs-tx.js#L8389),第8389行看起來像構造函數,但是再一次,我在JS中不太流利,所以我不確定這是否是我們需要的。 – jeff

回答

1

從您的問題看,您似乎沒有直接使用Browserify;相反,您正在使用使用Browserify構建的UMD包。

當某個UMD套件包含在script元素中時,其模塊通過全局公開 - 屬性添加到window。在這種情況下,全局/屬性被命名爲EthJS。如果你登錄,使用console.log(EthJS),你應該看到這一點:

Object 
    ABI:() 
    Account: function (data) 
    BN: function BN(number, base, endian) 
    Block: function (data) 
    Buffer: function Object 
    ICAP: function Object 
    RLP: function Object 
    Trie: function CheckpointTrie() 
    Tx: function (data) 
    Units: Object 
    Util: Object 
    VM: function VM(trie, blockchain, opts) 
    Wallet: function (priv, pub) 
    WalletHD: function EthereumHDKey() 
    WalletThirdparty: Object 

這表明交易構造被命名爲Tx,使你的代碼有可能是:

<script> 
$(document).ready(function() { 
    var tx = new EthJS.Tx(...); 
    ... 
}); // document.ready 
</script> 
+0

非常感謝!它似乎在工作。但我仍然不確定直接使用browserify和我在做什麼之間的區別。有沒有其他方法可以做到這一點?再次感謝! – jeff

+1

你根本沒有使用Browserify。 Browserify將CommonJS模塊組合到一個包中。你正在使用預建的'ethereumjs-all.js'包;你並沒有建立你自己的。除非您想使用CommonJS模塊編寫代碼並構建自己的包,否則不需要擔心Browserify。目前,您可能希望堅持'

相關問題