内容没多少,展开看,想要更深的,直接看官方文档吧
下面是主要原理
function require(path){
//全局path生产全局唯一标识
let moduleID='特殊处理的path'
//先会查找id缓存是否存在,如果有那么就直接返回这个cache[moduleID],没有便会运行储存
//也就是说每个模块只会运行一次
if(cache[moduleID])return cache[moduleID]
.......
let module={
exports:{}
}
//这也是为什么 exports==module.exports 为true的原因,同时更改更改module.exports={}后,就不相等的原因
let exports=module.exports
.......
let __dirname=getDirename(path)
let __filename=moduleID
.......
//require()将接受五个参数,这也是为什么你的文件里可以直接使用这个参数的原因,
//这也是高深的'生产环境’,也就是运行在不同函数的参数不同
function _require(exports,require,module,__filename,__diranme){.....}
.......
//后面会读取文件内容,并执行一边
_reuqire(exports,require,module,__filename,__diranme);
.......
//添加缓存
cache[moduleID]=module.exports
.......
return module.exports
}
参考渡一教育,这个人我觉得讲的真的强