require()

作者: 慕容跳凯 | 来源:发表于2016-11-17 10:56 被阅读0次
    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文件并运行

    相关文章

      网友评论

          本文标题:require()

          本文链接:https://www.haomeiwen.com/subject/lwjdpttx.html