Node中require()的原理

本文详细解析了Node.js中模块的加载过程,包括如何通过require加载模块,以及在这个过程中涉及的exports、require、module等全局变量的注入和使用。
module = new Module() //module 为 Module类的实例
var Module = function(id, parent) { 
  this.id = id; 
  this.exports = {}; 
  this.parent = parent; 
  this.filename = null; 
  this.loaded = false; 
  this.children = [];
}
var require = function(){
 return module.exports
}

模块的加载实质上就是,注入exports、require、module三个全局变量,然后执行模块的源码,然后将模块的 exports 变量的值输出。—— require() 源码解读

所以说每一个require的文件执行的过程,都是先读取文件,注入变量,再执行代码,所以node文件不需要自己实例化Module,在require的时候会自动实例化的,所以从另一个角度说,文件并不会直接执行,所以看上去文件中的require,module等变量都为创建而可以执行。

//a.js
exports.multiply = function(n) {
    return n * 1000 
};
//index.js
require('./a.js')

//require('./a.js')实际的变为了 
var module = { 
  exports: {} 
};
(function(module, exports) { 
  exports.multiply = function(n) {
    return n * 1000 
  }; 
}(module, module.exports)) 
return module.exports;
Demo

require原理
读取js文件并运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值