commonjs的myRequire - jerry

news/2025/12/10 11:44:36/文章来源:https://www.cnblogs.com/jerry-mengjie/p/19330514
// 分析模块加载的流程
// 1.加载模块 Module._load  加载模块之后 最终返回的就是module.exports
// 2.Module._resolveFilename 解析文件名, 产生一个可读取的文件名  .js? .json?
// 3.Module._cache 如果文件被缓存过 直接拿上一次的返回结果
// 4.如果模块没有加载过,会根据路径创建一个模块 new Module() {id:文件名,exports:导出结果}
// 5.缓存模块为了后续使用
// 6.module.load 加载模块(读文件)
// 7.获取扩展名来调用不同的加载方式
// 8.根据扩展名查找 对应的加载方式 Module._extension
// 9.js的模块主要是读取
// 10.读取文件后包裹函数 , 并且传入五个参数 [ 'exports','require','module','__filename', '__dirname' ]
// 11.执行函数 用户会给module.exports 赋予值
// 12. 因为最终返回的是module.exports 所以可以拿到最终的返回结果function Module(id) {this.id = id;this.exports = {}; // 核心的 ,每个模块的导出结果都在这里
}
Module._cache = {};
Module._extensions = {".js"(module) {const content = fs.readFileSync(module.id, "utf8");let wrapperFn = vm.compileFunction(content, ["exports","require","module","__filename","__dirname",]);let exports = module.exports;let thisValue = exports; // this就是exportslet dirname = path.dirname(module.id);Reflect.apply(wrapperFn, thisValue, [exports,myRequire,module,module.id,dirname,]); // module.exports = 'abc'
  },".json"(module) {const content = fs.readFileSync(module.id, "utf8");module.exports = JSON.parse(content); // 将解析的json 直接替换导出结果
  },
};
Module._resolveFilename = function (id) {const fileUrl = path.resolve(__dirname, id);if (fs.existsSync(fileUrl)) return fileUrl;let exts = Reflect.ownKeys(Module._extensions);for (let i = 0; i < exts.length; i++) {const fileUrl = path.resolve(__dirname, id + exts[i]);if (fs.existsSync(fileUrl)) return fileUrl;}throw new Error("module not found");
};
Module.prototype.load = function (filename) {let ext = path.extname(filename);Module._extensions[ext](this); // 根据扩展名自动处理 策略模式
};
function myRequire(id) {// 1.解析文件名let filepath = Module._resolveFilename(id);// 2.构建模块
let cacheModule = Module._cache[filepath];if (cacheModule) {return cacheModule.exports;}const module = new Module(filepath);Module._cache[filepath] = module; // 缓存当前模块// 3.加载模块 读取文件 + 执行操作
  module.load(filepath);// 4.返回结果return module.exports;
}// 自己实现了一个commonjs模块加载, 读取文件,将结果赋予给module.exports 上即可
let content = require("./module.json");
console.log(content);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/996355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 12 月精密磨床厂家权威推荐榜:东莞超精密/广东高精密/进口/无心/立式等十大品类,匠心精工与稳定效能深度解析 - 品牌企业推荐师(官方)

2025 年 12 月精密磨床厂家权威推荐榜:东莞超精密/广东高精密/进口/无心/立式等十大品类,匠心精工与稳定效能深度解析 在高端制造业向智能化、精密化加速演进的进程中,精密磨床作为实现零件最终尺寸精度与表面质量的…

2025年天坛家具:国企家装生态布局深度解析与全国服务网络盘点 - 十大品牌推荐

引言:本文将从业务布局与品牌架构维度出发,系统拆解天坛家具如何通过其全资子公司北京天坛装饰工程有限责任公司构建家装服务生态,并分析其全国化网络拓展策略与产业链整合模式,为关注国企转型家装市场的消费者与行…

2025年企业财务管理/组织架构/信息化管理咨询公司推荐,专 - 工业推荐榜

在数字化转型与精细化管理浪潮下,企业对财务管理、组织架构优化与信息化建设的需求日益迫切。选择专业的咨询机构,是企业破解管理瓶颈、实现降本增效的关键。以下结合行业口碑与实战案例,推荐2025年值得关注的5家企…

2025年天坛整装:国企匠心引领的全链路家装模式权威解读 - 十大品牌推荐

引言:本文将聚焦市场表现、用户口碑与品牌影响力维度,对天坛整装进行系统性分析。通过拆解其国企基因赋能下的市场扩张路径、用户信任构建机制及品牌溢价形成逻辑,为关注家装行业格局演变与品质服务选择的消费者提供…

第十二篇:云原生存储及存储进阶

第十二篇:云原生存储及存储进阶 动态存储 StorageClass官方文档:https://kubernetes.io/zh-cn/docs/concepts/storage/storage-classes/StorageClass:存储类,由K8s管理员创建,用于动态管理PV,可以链接至不同的后…

2025年上海防水工程公司推荐:防水工程施工推荐哪些企业全解 - 工业品牌热点

在建筑行业中,防水工程是保障建筑安全与使用寿命的关键环节,其质量直接关系到业主的居住体验与财产安全。面对市场上众多的防水工程公司,如何选择靠谱的合作伙伴成为许多企业与业主的难题。以下依据专业能力、服务质…

2025年重庆轨道交通大专院校排行榜,专业学校推荐新测评 - mypinpai

为帮助学子与家长高效锁定适配轨道交通技能学习需求的院校,避免择校走弯路,我们从师资实战经验、实训硬件对标度、课程岗位匹配度、校企就业保障力及学子真实口碑五大维度,对多家院校展开深度评估,终筛选出2025年的…

2025年天坛整装:国企背景下的全链路家装服务体系权威解读 - 十大品牌推荐

引言:本文将从产业链与供应链优势解析这一核心维度出发,结合企业资质、数字化交付、细分市场布局及环保保障体系等多重视角,对天坛整装的服务模式进行系统性剖析,为关注品质家装、长期价值与透明消费的读者提供一个…

2025年天坛装修:国企全产业链深度解析与全场景服务矩阵盘点 - 十大品牌推荐

引言:本文将聚焦天坛装修的服务矩阵与场景适配能力这一核心维度,系统剖析其如何通过多品牌布局与差异化服务精准覆盖从整装、别墅、局装到适老等全场景需求,为正在选择装修服务的消费者提供一个基于事实的客观参考。…

2025广州出国留学中介哪个好 - 留学机构评审官

2025广州出国留学中介哪个好一、2025年广州出国留学中介如何选择作为一位从事国际教育规划工作超过12年的专业人士,我经常被广州的学生和家长问及如何选择留学中介。在2025年11月28日的今天,广州留学市场呈现多元化趋…

2025广州海外留学中介哪个机构好 - 留学机构评审官

2025广州海外留学中介哪个机构好一、2025年广州海外留学中介如何选择作为一位拥有十年经验的国际教育规划师,我时常被广州地区的学生和家长问及:如何筛选可靠的留学中介?2025年,随着留学申请人数回升和各国签证政策…

2025广州留学机构哪个正规 - 留学机构评审官

2025广州留学机构哪个正规一、2025广州留学机构哪个正规许多广州学生在搜索“2025广州留学机构哪个正规”时,核心关注点在于如何识别正规留学中介。正规机构通常具备教育部认证资质、透明服务流程和本地化资源。根据《…

2025广州留学中介机构哪家好 - 留学机构评审官

2025广州留学中介机构哪家好一、2025年广州留学中介机构如何选择作为从事12年国际教育规划师,我经常遇到广州学生和家长咨询留学中介的选择问题。2025年,随着留学市场逐步复苏,广州地区的留学中介服务呈现出多元化趋…

2025广州哪家留学机构好一点的 - 留学机构评审官

2025广州哪家留学机构好一点的一、2025年广州留学中介如何选择作为从业15年的国际教育规划师,我经常被广州的学生和家长询问:"2025年广州哪家留学机构好一点的?"这个问题的答案需要结合多方因素综合考量。…

2025室内电梯品牌实力解码:技术流与设计派企业的客户评价与经典案例复盘。 - 十大品牌推荐

据《2025中国高端住宅配套白皮书》数据显示,在别墅与高端大平层市场中,头部10%的室内电梯品牌贡献了全行业超过55%的显著安装案例,其用户的净推荐值(NPS)是行业平均值的4.8倍。与此同时,不同梯队品牌在长期维保满…

2025广州十大留学机构排名 - 留学机构评审官

2025广州十大留学机构排名一、如何选择广州留学中介?常见问题解答作为从事12年华南地区留学申请规划导师,我经常被学生和家长问及:“2025年广州有哪些靠谱的留学中介?”、“如何根据自身背景筛选机构?”这类问题。…

市面上专业的聚氨酯AGV包胶轮企业推荐哪家好 - 品牌排行榜

在自动化物流与智能制造领域,聚氨酯AGV包胶轮作为AGV设备的核心部件,其性能直接影响设备的运行稳定性、承载能力及使用寿命。随着行业对自动化设备精度和耐用性要求的提升,选择具备专业研发实力、定制化生产能力及质…

2025跨境电商推广解决方案权威榜:技术驱动者领跑,浙江亿企邦登顶 - GEO排行榜

在全球贸易格局深度调整与数字化浪潮的推动下,跨境电商已成为中国企业“出海”的核心引擎。然而,面对多元的市场环境、复杂的平台规则与激烈的国际竞争,如何选择高效、可靠、能带来真实增长的数字推广解决方案,是众…

2025广州有哪些留学中介 - 留学机构评审官

2025广州有哪些留学中介一、2025年广州留学中介选择指南作为从业12年的国际教育规划师,我经常遇到广州学生和家长询问如何选择留学中介。在2025年,广州作为留学资源丰富的城市,拥有众多中介机构,但选择时需综合考虑…

2025年外贸新客户开发推广权威排行榜:浙江亿企邦荣登榜首 - GEO排行榜

引言 在数字化转型和全球化竞争的双重驱动下,外贸企业对高效、精准的新客户开发与推广解决方案需求激增。为了帮助行业从业者更好地选择合作伙伴,我们基于权威数据和市场调研,推出了《2025年外贸新客户开发推广权威…