在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

模塊

編寫稍大一點的程序時一般都會將代碼模塊化。在 NodeJS 中,一般將代碼合理拆分到不同的 JS 文件中,每一個文件就是一個模塊,而文件路徑就是模塊名。

在編寫每個模塊時,都有 require、exports、module 三個預先定義好的變量可供使用。

require

require 函數(shù)用于在當前模塊中加載和使用別的模塊,傳入一個模塊名,返回一個模塊導出對象。模塊名可使用相對路徑(以./開頭),或者是絕對路徑(以/C:之類的盤符開頭)。另外,模塊名中的.js擴展名可以省略。以下是一個例子。

var foo1 = require('./foo');
var foo2 = require('./foo.js');
var foo3 = require('/home/user/foo');
var foo4 = require('/home/user/foo.js');

// foo1 至 foo4 中保存的是同一個模塊的導出對象。 另外,可以使用以下方式加載和使用一個 JSON 文件。

var data = require('./data.json');

exports

exports 對象是當前模塊的導出對象,用于導出模塊公有方法和屬性。別的模塊通過 require 函數(shù)使用當前模塊時得到的就是當前模塊的 exports 對象。以下例子中導出了一個公有方法。

exports.hello = function () {
    console.log('Hello World!');
};

module

通過 module 對象可以訪問到當前模塊的一些相關信息,但最多的用途是替換當前模塊的導出對象。例如模塊導出對象默認是一個普通對象,如果想改成一個函數(shù)的話,可以使用以下方式。

module.exports = function () {
    console.log('Hello World!');
};

以上代碼中,模塊默認導出對象被替換為一個函數(shù)。

模塊初始化

一個模塊中的 JS 代碼僅在模塊第一次被使用時執(zhí)行一次,并在執(zhí)行過程中初始化模塊的導出對象。之后,緩存起來的導出對象被重復利用。

主模塊

通過命令行參數(shù)傳遞給 NodeJS 以啟動程序的模塊被稱為主模塊。主模塊負責調(diào)度組成整個程序的其它模塊完成工作。例如通過以下命令啟動程序時,main.js 就是主模塊。

$ node main.js

完整示例

例如有以下目錄。

- /home/user/hello/
    - util/
        counter.js
    main.js

其中 counter.js 內(nèi)容如下:

var i = 0;

function count() {
    return ++i;
}

exports.count = count;

該模塊內(nèi)部定義了一個私有變量 i,并在 exports 對象導出了一個公有方法 count。

主模塊 main.js 內(nèi)容如下:

var counter1 = require('./util/counter');
var    counter2 = require('./util/counter');

console.log(counter1.count());
console.log(counter2.count());
console.log(counter2.count());

運行該程序的結(jié)果如下:

$ node main.js
1
2
3

可以看到,counter.js 并沒有因為被 require 了兩次而初始化兩次。