鍍金池/ 教程/ HTML/
文本編碼
小結(jié)
API 走馬觀花
API 走馬觀花
迭代
小結(jié)
運行
回調(diào)
需求
代碼設(shè)計模式
進程介紹
模塊
工程目錄
小結(jié)
小結(jié)
遍歷目錄
小結(jié)
小結(jié)
API 走馬觀花
用途
NPM
小結(jié)
安裝
網(wǎng)絡(luò)操作介紹
二進制模塊
什么是 NodeJS
命令行程序
靈機一點
域(Domain)
應(yīng)用場景
模塊路徑解析規(guī)則
文件拷貝

我們已經(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)在路徑里看上去不是個好主意。因此我們需要做點額外的工作,讓包使用起來更像是單個模塊。

index.js

當(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

如果想自定義入口模塊的文件名和存放位置,就需要在包目錄下包含一個 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 找到入口模塊所在位置。

上一篇:進程介紹下一篇:用途