首頁  >  文章  >  web前端  >  Node.js如何載入模組和安裝模組實例詳解

Node.js如何載入模組和安裝模組實例詳解

伊谢尔伦
伊谢尔伦原創
2017-07-24 10:17:571828瀏覽

Node.js中模組可以透過檔案路徑或名字取得模組的參考。模組的引用會對應到一個js檔案路徑,除非它是一個Node內建模組。 Node的內建模組公開了一些常用的API給開發者,而且它們在Node進程開始的時候就預先載入了。

其它的如透過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也不存在,那麼載入將會失敗。

假如目錄結構如下

Node.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

#輸入如下

Node.js如何載入模組和安裝模組實例詳解

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

以上是Node.js如何載入模組和安裝模組實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn