2012-03-01 73 views

回答

5

假設你不依賴超出了語言本身的任何API(例如,您不要使用超過setTimeout/clearTimeoutsetInterval/clearInterval和附設於Math其他任何功能),只有兩個事情要操心:

  1. 你可以依靠新的JS功能,如Array::forEachArray::indexOf在節點被周圍,而不是在瀏覽器中。 CoffeeScript分別幫助您避免這兩個陷阱,分別是for x in arrif x in arr語法。

  2. 在瀏覽器中,全局對象是window;在Node中,全局對象是global,但您通常需要導出事物。因此,如Underscore.js等人所示,通常的解決方案是將root = this寫入模塊的頂部,並將所有內容附加到root。在最外層的範圍內,this指向瀏覽器中的window,Node中指向exports

我在這裏假設你是在單個腳本中定義你的模塊。如果不是的話,你應該看看像sstephenson的stitch這樣的工具,它可以讓你編寫一組模塊,它們可以在節點中彼此相隔require,然後將它們拼接在一起用於瀏覽器。

+1

+1 for'root = this' - 儘管強大的卡茨先生的[在本文中讓人放心的語氣](http://yehudakatz.com/2011/08/11/understanding-javascript-function-invocation-and這個/),如果你像伯納姆先生說的那樣做,你的生活一般會簡單得多。 – fish2000 2012-03-02 03:10:17

+0

應該被標記爲接受答案 – 2012-03-02 14:07:45