Nodejs的require流程

news/2024/11/15 22:49:54/文章来源:https://www.cnblogs.com/MCMonkey/p/18201100

nodejs的require流程

.

一、require简单流程

nodejs的require流程大致如下:

require流程

原图:https://images.cnblogs.com/cnblogs_com/blogs/668717/galleries/2013323/o_240518085412_require流程探索.png

.

二、hook require的简单模板

function makeRequireFunction(_module_) {const Module = _module_.constructor;const Module_resolveFilename = Module._resolveFilename;/*** require的路径解析* @param args * @returns */Module._resolveFilename = function (...args) {let requestPath = args[0]; //请求路径let parent = args[1]; //父模块return Module_resolveFilename(...args); //调用原生路径解析};/*** require入口* @param requirePath * @returns */const myRequire = function(requirePath) {let _exports = _module_.require(requirePath); //调用原生requirereturn _exports;};/*** 自定义后缀解析* 一般情况下在这里手动读取文件,自定义解析逻辑,然后导出exports对象* @param _module_ 当前模块* @param _filepath_ 当前文件绝对路径*/Module._extensions['.bc'] = function (_module_, _filepath_) { // let myRequire = makeRequireFunction(_module_);// let _exports = myRequire("xxx") //调用自定义require// 解析完毕后的导出_module_.exports={ };};myRequire.main = process.mainModule;myRequire.extensions = Module._extensions;myRequire.cache = Module._cache;return myRequire;
}

参考:

require() 源码解读 - 阮一峰的网络日志 (ruanyifeng.com) 备用链接(https://files.cnblogs.com/files/blogs/668717/require源码解读-阮一峰的网络日志.pdf?t=1716020158&download=true)

通过字节码保护Node.js源码之原理篇 - 知乎 (zhihu.com)

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

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

相关文章

2024-05-20 通达信选股 不破放量大阴底

AA:=HHVBARS(V,21); AB:=REF(C,AA)<REF(O,AA);AC:=REF(C,AA)/REF(C,AA+1)<0.9;AD:=C>REF(C,AA);AE:= C>1;AXG: AB AND AC AND AD AND AE;不破底,说明主力吸筹,就可以考虑区间的高抛低吸

OpenXR™Loader-设计和操作

OpenXR™Loader-设计和操作 介绍 本文档包含了解如何为OpenXR加载程序进行开发以及与之交互的必要信息。本文档的预期用途是作为详细的设计文档和学习一般OpenXR加载程序行为的工具。 如果本文档与OpenXR规范之间存在任何差异,则以该文档为准。 OpenXR™和OpenXR标志是Khronos…

Win10电脑怎么调整光标闪烁速度

1.按键盘上的win键,呼出开始菜单 2.在开始菜单中输“键盘”,单击控制面板中的键盘设置。3.在弹出的界面中,调整光标闪烁速度

04--JS04--进阶

JavaScript04:拓展进阶 一. jsonp 为了解决浏览器跨域问题,jQuery提供了jsonp请求 在网页端如果见到了服务器返回的数据是: ​ xxxxxxxxxxdjsfkldasjfkldasjklfjadsklfjasdlkj( { json数据 } ) ​ 在Preview里面可以像看到json一样去调试 这就是jsonp,依然是Ajax jsonp的逻辑…

.NET 中 Channel 类简单使用

Channel 是干什么的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consumers asynchronously. The library targets .NET Standard and works on all .NET implementations. Channels …

第五周-云计算运维作业

1. 总结openssh服务安全加固和总结openssh免密认证原理,及免认证实现过程。 1.仅使用SSHv2 协议 2.关闭或者延迟压缩 Compression no 3.限制身份验证最大尝试次数 MaxAuthTries 3 4.禁用root账户登录 PermitRootLogin no 5.显示最后一次登录的日期和时间 PrintLastLog yes #用…

深入掌握service

深入掌握Service Service是Kubernetes实现微服务架构的核心概念,通过创建Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上。 Service定义 Service用于为一组提供服务的Pod抽象一个稳定的网络访问地址,是Kuberne…

uniapp-webview获取h5页面加载错误信息及自定义错误页面(捕获uniapp中webview加载error)

问题描述uniapp中需要加载H5页面,使用了webview,但是在某些情况下,页面加载出现错误,但是官方文档里给出的捕获错误信息的回调函数,只适用部分平台,某些平台无法获取@error异常信息,这种情况如何处理呢? 解决uniapp web-view组件的@load @error事件无效,事件不触发的问…

物联网在智慧园区的八大应用

物联网在智慧园区领域有许多应用。以下是一些常见的应用场景: 智能安防系统: 通过物联网技术,可以实现智能监控、入侵检测、视频监控、智能门禁等安防功能,提高园区的安全性和管理效率。 能源管理: 物联网可以用于实时监测和控制园区内的能源消耗,包括电力、水、气等,通…

tensorflow与python版本对应关系

下完之后才发现tensorflow1.12.0需要3.6的版本……