為了讓Node.js的文件可以相互調用,Node.js提供了一個簡單的模塊系統。
模塊是Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。
創建模塊
在 Node.js 中,創建一個模塊非常簡單,如下我們創建一個 main.js 文件,代碼如下:
var hello = require('./hello');
hello.world();
以上實例中,代碼 require('./hello') 引入了當前目錄下的 hello.js 文件(./ 為當前目錄,node.js 默認后綴為 js)。
Node.js 提供了 exports 和 require 兩個對象,其中 exports 是模塊公開的接口,require 用于從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
接下來我們就來創建 hello.js 文件,代碼如下:
exports.world = function() {
console.log('Hello World');
}
在以上示例中,hello.js 通過 exports 對象把 world 作為模塊的訪問接口,在 main.js 中通過 require('./hello') 加載這個模塊,然后就可以直接訪 問 hello.js 中 exports 對象的成員函數了。
有時候我們只是想把一個對象封裝到模塊中,格式如下:
module.exports = function() {
// ...
}
例如:
//hello.js
function Hello() {
var name;
this.setName = function(thyName) {
name = thyName;
};
this.sayHello = function() {
console.log('Hello ' + name);
};
};
module.exports = Hello;
這樣就可以直接獲得這個對象了:
//main.js
var Hello = require('./hello');
hello = new Hello();
hello.setName('BYVoid');
hello.sayHello();
模塊接口的唯一變化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用該模塊時,其接口對象就是要輸出的 Hello 對象本身,而不是原先的 exports。