Nodejs 初探

81 阅读1分钟

1、nodejs里面的模块是什么

一个模块就是一个对象, 如下描述:

function Module(id, parent) {  
    this.id = id;  
    this.exports = {};  
    this.parent = parent;  
    this.filename = null;  
    this.loaded = false;  
    this.children = [];
} 

module.exports = Module; 
var module = new Module(filename, parent);

2、模块是如何加载的

nodejs中我们使用require加载模块,一共经历了如下四个步骤:

  • 计算模块路径

  • 判断模块是否在缓存中, 如果在,从缓存中获取

  • 加载模块

  • 输出模块的exports属性

    // require 其实内部调用 Module._load 方法 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); }

    /******这里注意了/ // 第三步:生成模块实例,存入缓存 // 这里的Module就是我们上面的1.1定义的Module var module = new Module(filename, parent); Module._cache[filename] = module;

    /******这里注意了/ // 第四步:加载模块 // 下面的module.load实际上是Module原型上有一个方法叫Module.prototype.load try { module.load(filename); hadException = false; } finally { if (hadException) { delete Module._cache[filename]; } }

    // 第五步:输出模块的exports属性 return module.exports; };