当前位置: 首页 > 后端技术 > Node.js

单步调试了解webpack中通过require加载nodejs原生模块的原理

时间:2023-04-03 15:57:06 Node.js

在webpack和nodejs中,我们经常使用require函数来加载原生模块或者开发者自定义的模块。原生模块的加载,如:constpath=require("path");这个语句在webpack和nodejs应用中经常使用。今天就来说说它的实现原理。或者通过单步调试来学习。大家一定要先过一遍我之前的文章如何调试webpack打包过程?了解如何调试webpack打包过程。require函数的实现位于file:///internal/module.js中。注意第10行和第13行requireDepth的加减,因为当一个模块通过require加载时,可能会递归加载另一个依赖的模块,所以需要requireDepth字段记录加载模块的深度。这个module.js的实际地址位于当前项目文件夹下的node_modules文件夹下:第11行的mod变量代表什么?从debugger可以看出,当前命令行节点启动的webpack.js:mod.require(path)会将执行下发给Module._load函数:首先会去Module._cache中检查是否路径模块已加载。在我的例子中,路径是第一次加载,所以Module._cache是空的。然后进入NativeModule.require(filename):nativeModule,即native模块,也有cache缓存机制。因为路径模块显然是原生模块,而不是开发者自己定义的模块,所以NativeModule.getCached返回的是已经预加载的路径模块。cached.exports包含了一系列函数,这些函数是我们在nodejs应用中经常用到的工具函数,比如join、parse、resolve等,这就是nodejs和webpack中原生模块的加载原理。希望这对前端开发人员有所帮助。获取更多Jerry原创文章,请关注公众号“王子熙”: