单步调试理解webpack里通过require加载nodejs原生模块实现原理

在webpack和nodejs里,我们经常使用require函数加载原生模块或者开发人员自定义的模块。

站在用户的角度思考问题,与客户深入沟通,找到尼金平网站设计与尼金平网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟主机、企业邮箱。业务覆盖尼金平地区。

原生模块的加载,比如:

const path = require("path");

这个语句是webpack和nodejs应用里经常使用到的。今天就来谈谈它的实现原理。

还是通过单步调试的方式来学习。

大家首先得通过我前一篇文章  webpack打包过程如何调试? 学会如何调试webpack打包过程。

require函数的实现位于file:///internal/module.js

单步调试理解webpack里通过require加载nodejs原生模块实现原理

注意看第10行和第13行的requireDepth 加减一。因为一个module通过require被加载时,可能会递归地加载另外的依赖module,所以需要这个requireDepth字段来记录加载module的深度。

这个module.js的实际地址位于当前项目文件夹下的node_modules文件夹下面:

单步调试理解webpack里通过require加载nodejs原生模块实现原理

第11行的mod变量代表什么?

从调试器看出,就是当前命令行node启动的webpack.js:

单步调试理解webpack里通过require加载nodejs原生模块实现原理

mod.require(path)会将执行投递到Module._load函数:

单步调试理解webpack里通过require加载nodejs原生模块实现原理

首先会去Module._cache里检查path模块是否已经加载了。在我这个例子里,path是第一次加载,所以Module._cache是空的。

单步调试理解webpack里通过require加载nodejs原生模块实现原理

那么进入NativeModule.require(filename):

单步调试理解webpack里通过require加载nodejs原生模块实现原理

nativeModule,即原生模块,里面也有cache缓存机制。

单步调试理解webpack里通过require加载nodejs原生模块实现原理

因为path模块显然是原生模块,而非开发人员自己定义的模块,因此NativeModule.getCached返回了已经被预加载的path模块.

cached.exports里包含了一系列函数,这些函数就是我们nodejs应用里经常使用的工具函数,比如join, parse, resolve等等。

单步调试理解webpack里通过require加载nodejs原生模块实现原理

这就是nodejs和webpack里原生模块的加载原理。希望对前端开发人员有所帮助。

单步调试理解webpack里通过require加载nodejs原生模块实现原理


网站栏目:单步调试理解webpack里通过require加载nodejs原生模块实现原理
当前地址:http://bzwzjz.com/article/pgpcch.html

其他资讯

Copyright © 2007-2020 广东宝晨空调科技有限公司 All Rights Reserved 粤ICP备2022107769号
友情链接: 成都定制网站建设 攀枝花网站设计 网站建设公司 成都企业网站设计 成都模版网站建设 定制网站建设 高端品牌网站建设 手机网站建设 定制级高端网站建设 成都网站制作 网站建设推广 成都网站建设 定制网站设计 阿坝网站设计 营销型网站建设 网站建设公司 H5网站制作 成都品牌网站设计 成都网站建设 重庆网站设计 成都企业网站制作 成都商城网站建设