Node.js源码中关于module.js 的问题
发布于 1 个月前 作者 helloedmund 264 次浏览 来自 问答

源码链接如下:https://github.com/nodejs/node-v0.x-archive/blob/master/lib/module.js

	function Module(id, parent) {
 	 	this.id = id;
  		this.exports = {};
 	 	this.parent = parent;
  		if (parent && parent.children) {
	  		parent.children.push(this);
  		}
 		 this.filename = null;
  		this.loaded = false;
  		this.children = [];
	}
	module.exports = Module;   \n```
	
	**如上代码所示,module.exports = Module, 但是这里貌似还没定义module, 为什么会这么写(位于源码52行)? 而下面代码Module._load()中又重新定义了module: var module = new Module(filename, parent); 第二个module在Module_load方法中定义,和之前一个module有什么区别?**
	
	```js\n  
	Module._load = function(request, parent, isMain) {
  		//  计算绝对路径
  		var filename = Module._resolveFilename(request, parent);
  		//  第一步:如果有缓存,取出缓存
  		var cachedModule = Module._cache[filename];
  		if (cachedModule) {
    		return cachedModule.exports;
  			// 第二步:是否为内置模块
  		if (NativeModule.exists(filename)) {
    		return NativeModule.require(filename);
  		}
  		// 第三步:生成模块实例,存入缓存
  		var module = new Module(filename, parent);
  		Module._cache[filename] = module;
  		// 第四步:加载模块
  		try {
    		module.load(filename);
    		hadException = false;
  		} finally {
    		if (hadException) {
     		 delete Module._cache[filename];
    	}
  	}
  	// 第五步:输出模块的exports属性
  		return module.exports;
	};   \n```
	
	这两个module有什么区别啊
回到顶部