模块系统
模块系统实现 Node.js 文件可以相互调用。
模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个 Node.js 文件就是一个模块。这个文件可能是 JavaScript 代码、JSON或者编译过的 C/C++ 扩展。
创建模块
Node.js 提供了 exports 和 require 两个对象:
- exports 是模块公开的接口,
- require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
创建 hello.js 文件
exports.word = function(){
console.log('Hello World');
}
创建 main.js 引入 hello 模块
var hello = require('./helloM');
hello.word();
注:以上示例中,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('champion');
hello.sayHello();
// 输出
Hellochampion
注:模块接口的唯一变化是使用 module.exports = Hello 代替了exports.world = function(){}。 在外部引用该模块时,其接口对象就是要输出的 Hello 对象本身,而不是原先的 exports。
exports 和 module.exports 的使用
如果要对外暴露实行或方法,就用 exports 就行,要暴露对象(类似 class,包含了很多属性和方法),就用 module.exports。