require伪代码:
// import fs from "fs"; var cache = {}; function require(modulePath) { //1.根据传入的模块路径获取绝对路径 用绝对路径作为id var moduleId = getModuleId(modulePath); //2.通过id判断缓存是否存在 if (cache[moduleId]) { return cache[moduleId]; } //3.代码运行辅助函数 function _require(exports, require, module, __filename, __dirname) { // 执行目标代码 // exports === this === module.exports // eval(fs.readFileSync(moduleId).toString()) } //准备运行辅助函数 var module = { exports: {}, }; var exports = module.exports; //获取模块文件的绝对路径 var __filename = moduleId; //获取模块目录的绝对路径 var __dirname = getDirName(__filename); //调用 获取导出的内容 (保存到module对象中) _require.call(exports, exports, require, module, __filename, __dirname); //缓存 module.exports cache[moduleId] = module.exports; //返回module.exports return module.exports; }