2013-10-04 38 views
1

我建立我的第一個節點模塊中,我希望能得到一個類似於jQuery的越來越像jQuery的語法時才從節點模塊

 
$(searchItem) 

所以代碼可能看起來像

 
var $$ = require("myModule"); 

$$(search).doAction(); 

之類的,而不是

 
$$.doAction(search); 

是否有可能在一個模塊中返回一個「根功能」也是這樣嗎?這樣做有沒有危險?

------------------更新Laurent說這是可行的,因爲Underscore做到了,而且它是安全的, ---------------------------

我已經更新我的代碼到我的模塊開始與自我引用功能(複製的下劃線)

 
(function(){ 
var fs = require("fs"); 
    console.log("starting"); 
    var root = this; 
    var config =JSON.parse(fs.readFileSync("./config.json")); 
    var $$ = function(obj){ 
     if(!obj){ 
      return config; 
     } else { 
      return obj; 
     } 
    } 
}).call(this) 

然後在我的JS網頁

 
require("myModule"); 
console.log($$("test")); 

希望這個控制檯將日誌 「測試」,但不幸的是我得到$$("test")不是一個函數。 ------------------------------------ update ------------ ------------------------------- 正如jtblin在下面的答案中指出的,出口module.exports = $$適用於輸出「測試」爲測試正在傳遞給函數,但我不能按照原始示例鏈接方法。部分路雖然。

回答

3

你有導出你的函數嗎?

在你的模塊:

module.exports = $$; 

在另一個文件

var $$ = require("myModule"); 
console.log($$("test")); 
+0

不錯的葡萄酒jtblin,我嘗試了你的建議,它一開始並沒有工作,但是在我的模塊中,我從'var $$ = function(){...'開始,然後是'module.exports = $$ ',它適用於返回「測試」,但它不允許我鏈接我的方法,就像原始示例'$$(search).doAction()'。我試圖創建$$'var $$ = {...'的對象,但是因爲$$不再是函數,所以我無法獲得「測試」。 – pedalpete

+0

要鏈接方法,你只需要在$$函數的末尾返回this。 – jtblin

+1

您還需要在$$原型上創建函數。 – jtblin

2

Underscore是使用最廣泛的node.js模塊之一,它的確如此,所以它非常安全。

+0

感謝勞倫特,我安裝了下劃線NPM模塊,並在查看源,然後試圖實現在一個自參照功能我的模塊,和上面描述的一樣,但是當我嘗試'$(「test」)'時,我得到「object不是函數」。我已經更新了上面的示例。感謝分享,感覺它很安全,現在我該如何完成任務? – pedalpete

+0

@ jtblin的回答看起來正確。 –