W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們已經(jīng)知道了JS模塊的基本單位是單個JS文件,但復(fù)雜些的模塊往往由多個子模塊組成。為了便于管理和使用,我們可以把由多個子模塊組成的大模塊稱做包
,并把所有子模塊放在同一個目錄里。
在組成一個包的所有子模塊中,需要有一個入口模塊,入口模塊的導(dǎo)出對象被作為包的導(dǎo)出對象。例如有以下目錄結(jié)構(gòu)。
- /home/user/lib/
- cat/
head.js
body.js
main.js
其中cat
目錄定義了一個包,其中包含了3個子模塊。main.js
作為入口模塊,其內(nèi)容如下:
var head = require('./head');
var body = require('./body');
exports.create = function (name) {
return {
name: name,
head: head.create(),
body: body.create()
};
};
在其它模塊里使用包的時候,需要加載包的入口模塊。接著上例,使用require('/home/user/lib/cat/main')
能達到目的,但是入口模塊名稱出現(xiàn)在路徑里看上去不是個好主意。因此我們需要做點額外的工作,讓包使用起來更像是單個模塊。
當(dāng)模塊的文件名是index.js
,加載模塊時可以使用模塊所在目錄的路徑代替模塊文件路徑,因此接著上例,以下兩條語句等價。
var cat = require('/home/user/lib/cat');
var cat = require('/home/user/lib/cat/index');
這樣處理后,就只需要把包目錄路徑傳遞給require
函數(shù),感覺上整個目錄被當(dāng)作單個模塊使用,更有整體感。
如果想自定義入口模塊的文件名和存放位置,就需要在包目錄下包含一個package.json
文件,并在其中指定入口模塊的路徑。上例中的cat
模塊可以重構(gòu)如下。
- /home/user/lib/
- cat/
+ doc/
- lib/
head.js
body.js
main.js
+ tests/
package.json
其中package.json
內(nèi)容如下。
{
"name": "cat",
"main": "./lib/main.js"
}
如此一來,就同樣可以使用require('/home/user/lib/cat')
的方式加載模塊。NodeJS會根據(jù)包目錄下的package.json
找到入口模塊所在位置。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: