模块
一个js文件就是一个模块
//hello.js
exports.world = function(){
console.log('Hello World');
}
//main.js
var hello = require('./hello'); //自动帮你寻找到js后缀的hello文件
hello.world(); //输出Hello World
把一个对象封装到一个模块
//hello.js
function Hello(){
var name;
this.setName = function(newName){
name = newname;
};
this.sayHello = function(){
console.log('Hello'+name);
};
};
module.exports = Hello;
//main.js
var Hello = require('./hello');
hello = new Hello(); //有趣,函数当对象用了,还new对象
hello.setName('jimmy');
hello.sayHello(); //打印 HelloJimmy
require加载逻辑
require执行后,先看是否在文件模块缓存区中,是的话,直接用。如果不是,我们来看是否是原生模块。是原生模块的话,我们检查是否在原生模块缓冲区中,是的话,直接用,不是的话,加载原生模块,再缓存原生模块,然后使用。假如不是原生模块,我们查找文件模块,根据扩展名载入文件模块,并且缓存文件模块,再执行。执行就是exports