跟我學Node.js(四)---Node.js的模組載入方式與機制

來源:互聯網
上載者:User

其它的如通過NPM安裝的第三方模組(third-party modules)或本地模組(local modules),每個模組都會暴露一個公開的API。以便開發人員可以匯入。如

複製代碼 代碼如下:
var mod = require('module_name')

此句執行後,Node內部會載入內建模組或通過NPM安裝的模組。require函數會返回一個對象,該對象公開的API可能是函數,對象,或者屬性如函數,數組,甚至任意類型的JS對象。

這裡列下node模組的載入及緩衝機制

1)載入內建模組(A Core Module)
2)載入檔案模組(A File Module)
3)載入檔案目錄模組(A Folder Module)
4)載入node_modules裡的模組
5)自動緩衝已載入模組

一、載入內建模組

Node的內建模組被編譯為二進位形式,引用時直接使用名字而非檔案路徑。當第三方的模組和內建模組同名時,內建模組將覆蓋第三方同名模組。因此命名時需要注意不要和內建模組同名。如擷取一個http模組

複製代碼 代碼如下:
var http = require('http')

返回的http即是實現了HTTP功能Node的內建模組。

二、載入檔案模組

絕對路徑的

複製代碼 代碼如下: 
var myMod = require('/home/base/my_mod')


或相對路徑的

複製代碼 代碼如下: 
var myMod = require('./my_mod')


注意,這裡忽略了副檔名“.js”,以下是對等的

複製代碼 代碼如下: 
var myMod = require('./my_mod')
var myMod = require('./my_mod.js')

  
三、載入檔案目錄模組

可以直接require一個目錄,假設有一個目錄名為folder,如

複製代碼 代碼如下: 
var myMod = require('./folder')

此時,Node將搜尋整個folder目錄,Node會假設folder為一個包並試圖找到套件定義檔package.json。如果folder目錄裡沒有包含package.json檔案,Node會假設預設主檔案為index.js,即會載入index.js。如果index.js也不存在,那麼載入將失敗。

假如目錄結構如下

package.json定義如下

複製代碼 代碼如下:
{
    "name": "pack",
    "main": "modA.js"
}

此時 require('./folder') 將返回模組modA.js。如果package.json不存在,那麼將返回模組index.js。如果index.js也不存在,那麼將發生載入異常。

四、載入node_modules裡的模組

如果模組名不是路徑,也不是內建模組,Node將試圖去目前的目錄的node_modules檔案夾裡搜尋。如果目前的目錄的node_modules裡沒有找到,Node會從父目錄的node_modules裡搜尋,這樣遞迴下去直到根目錄。

不必擔心,npm命令可讓我們很方便的去安裝,卸載,更新node_modules目錄。

五、自動緩衝已載入模組

對於已載入的模組Node會緩衝下來,而不必每次都重新搜尋。下面是一個樣本

modA.js

複製代碼 代碼如下:
console.log('模組modA開始載入...')
exports = function() {
    console.log('Hi')
}
console.log('模組modA載入完畢')

init.js

複製代碼 代碼如下: 
var mod1 = require('./modA')
var mod2 = require('./modA')
console.log(mod1 === mod2)

命令列執行:

node init.js

輸入如下

可以看到雖然require了兩次,但modA.js仍然只執行了一次。mod1和mod2是相同的,即兩個引用都指向了同一個模組對象。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.