/** * require 的原理 */ // function require(modulePath){ // 1. 把路劲转为绝对地址, 直接到磁盘的那种 , 这里又涉及到,路径转化问题 // 1-1: 传入的是绝对路径,直接不用转 // 1-2: 传入的是./ 或者 ../ 开头的查找模块的绝对路径 // 1-3: 传入的是直接一个路径开头的,先判断传入的是否为一个node的内置模块,如果是内置模块直接使用内置模块,如果不是内置模块,会在当前层的node_modules里面查看看看能不能找到,如果找不到去上一层的node_modules里面查看,直到找到 // 1-4: 注意: 这里查找如果的路径可以默认不带后缀名, 则默认使用 .js .json .mjs .node来进行查找, 如果找到目录下面没有文件或者如果是package.json 里面的main字段会自动使用index.js 来进行导入 // // 2. 判断在缓存中查找是否导入过改模块, 如果导入过,直接从缓存中拿结果 // 3. 如果缓存中没有,直接读取文件的内容并且放到一个函数的执行环境里面 // 4. function __temp(module, exports, require, __dirname, __filename) { // 读取的文件内容 } // 5. 创建module对象 let module = module.exports // 这里的this == module.exports // 6. 调用函数执行 __temp.call(module.exports, module, exports, require, module.dirname, module.filename) // 7. 返回结果 return module.exports // }