2013-07-30 58 views
0

我正在學習hexo的源代碼,這是一個基於node.js的項目。 而且還有一個文件init.js:模塊作爲文件夾,但該文件夾下的index.js只包含一些require語句

if (results.config){ 
require('./plugins/tag'); 
require('./plugins/deployer'); 
require('./plugins/processor'); 
require('./plugins/helper'); 
require('./plugins/filter'); 
require('./plugins/generator'); 
} 

爲什麼這些需要聲明沒有參考?因此,我檢查了這些文件夾下的每個index.js(例如tag),index.js的外觀如下:

require('./init'); 
require('./config'); 
require('./generate'); 
require('./server'); 
require('./deploy'); 
require('./migrate'); 
require('./new'); 
require('./routes'); 
require('./version'); 
require('./render'); 

未找到出口。我想知道這些如何工作。

+0

我已閱讀此。感謝您的評論,但它不能解釋我的困惑。 – cinvro

+0

@保羅,你是對的。我刪除了我的評論。 –

回答

0

我查看了你正在談論的源代碼,對於你的問題的基本答案是這些代碼需要運行。通常情況下,你需要進行某種導出來利用這些文件中的對象,但是hexo有點不標準。 (除了via需求),他們正在做的是創建一個名爲'extend'的對象(查看extend.js),然後是每個單獨的文件(例如./)。 init,./migrate等)需要extend.js,並以一種命名空間的方式掛起新的對象和函數。

如果你看看這些文件的結尾,你會看到一些調用extend.tag.register和其他的東西。模塊在需要的時候被緩存,所以在實踐中,它們像其他語言中的單例一樣以他們的方式行事。

+0

哇!清楚和有益的,謝謝。 – cinvro

0

正如Paul指出的那樣,您所看到的要求應該被視爲功能單位本身,而不是返回任何有用的值。每個文件都會調用一個函數來修改內部狀態。

相關問題