国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 14:56:44
字體:
來源:轉載
供稿:網友

其它的如通過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是相同的,即兩個引用都指向了同一個模塊對象。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 正定县| 淮阳县| 卓资县| 介休市| 广灵县| 福安市| 泽州县| 交城县| 罗田县| 眉山市| 湾仔区| 静海县| 龙胜| 道真| 灵川县| 临江市| 高淳县| 健康| 贵港市| 灵璧县| 吉林市| 池州市| 宜黄县| 江孜县| 河池市| 米泉市| 额尔古纳市| 渭源县| 高尔夫| 台江县| 晋宁县| 冷水江市| 图片| 博罗县| 耿马| 延寿县| 自治县| 阳东县| 寻乌县| 仁布县| 色达县|