2012-09-24 201 views
18

我創建了一個節點模塊,它基本上只是一些有用的JS,也可以用於客戶端。我知道require.js可以加載common.js組件,但我不一定要制定一個使用我的模塊客戶端的每個人都需要require或common.js或其他東西的任務。我也不想強迫他們刪除文件底部的module.exports = ...。其他人如何解決這個問題?你只是創建2個版本,或2個「編譯」版本? module.exports工作到處嗎?module.exports客戶端端

+2

關於這個問題我知道的最好的博覽會是http://www.2ality.com/2011/11/module-gap.html。作者討論了優勢/劣勢和開發/部署模式。 –

回答

16

這是underscore.js做:

if (typeof exports !== 'undefined') { 
    if (typeof module !== 'undefined' && module.exports) { 
    exports = module.exports = _; 
    } 
    exports._ = _; 
} else { 
    root['_'] = _; 
} 
+0

啊,這很酷! – Parris

+0

我不知道如何測試這部分代碼來檢查它是否成功導出。 – Jun

4

這對我(的CoffeeScript)工作。假設「命名空間」就是你要索賠的window範圍內爲客戶

(module ? {}).exports = @Namespace = 
    my: 'cool' 
    module: '!' 

然後你就可以在瀏覽器中使用Node.js的require('namespace').my === 'cool'Namespace.my === 'cool'什麼。這轉化爲JS作爲

(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = { 
    my: 'cool', 
    module: '!' 
}; 
1

我覺得這是簡單的:

try { 
    module.exports = exports = MyModule; 
} catch (e) {} 

這個文件可以包含在瀏覽器和node.js中都