2014-05-01 20 views
1

我寫了一個小的解析器,目前工作在節點的應用程序模塊,但不知道是否有一種方式,我可以做一個模塊,將在的NodeJS應用程序和客戶端應用程序的工作都那使用requirejs?寫在的NodeJS工作都和requirejs

path/to/lib/index.js

function someRandom(strings) { 
    // we are doing something here 
    return strings 
} 

exports.someRandom = someRandom; 

現在我得到這個在客戶端

Uncaught ReferenceError: exports is not defined 

我知道,我可以使用節點requirejs,然後改變結構使用define但有其他沒有添加節點的方式requirejs

這是我js/main.js文件

require(["path/to/lib/index"], function(something) { 
    // will do something here 
}); 

回答

1

我喜歡做的是寫我在AMD語法所有模塊(使用define),並使用amd-loader加載它們節點的方式。請注意,即使使用AMD語法,此解決方案也不使用RequireJS。

然而,有一個辦法做到這一點,而不必使用AMD的語法。您可以使用r.js來包裝你的節點模塊。舉例來說,如果你把你的節點模塊樹in,你可以這樣做:

$ r.js -convert in out 

這將在out創建對應於那些在in但與define呼叫包裹文件的樹。然後你可以使用RequireJS在瀏覽器中加載它們。有限制。有些是顯而易見的,如不能夠使用依賴於節點運行的節點模塊(如fschild_process等)。有些則比較含蓄,喜歡的事實,你不能使用require(foo)其中foo是一個變量(RequireJS將只處理字符串文字那裏)。有關詳細信息,請參閱documentation

+0

'AMD-loader'我想我可以用這一個:)謝謝了! – Ali