博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webpack最简单的入门教程里bundle.js之运行单步调试的原理解析
阅读量:5757 次
发布时间:2019-06-18

本文共 1029 字,大约阅读时间需要 3 分钟。

读这篇文章的朋友,请确保对webpack有最基础的认识。

您可以阅读我前一篇文章:Webpack 10分钟入门 来在本地运行一个Webpack的hello world项目。

我这里可以在回顾一下这个web pack的hello world项目。

用webpack打包之后,项目文件夹里包含了这些资源:

index.html的源代码很简单,就包含了一个webpack打包后生成的bundle.js文件:

那么运行时,Hello,Jerry的字符串是如何通过bundle.js打印出来的呢?

这就是本文要阐述的内容。我们可以从bundle.js第一行设置断点,然后开始调试:

把我们web工程里定义的两个module注入到__webpack_require__.m里:

因为我们在webpack.config.js里定义的入口模块为main.js:

在bundle.js里此处进行运行时加载:return __webpack_require__(__webpack_require__.s = "./main.js");

__webpack_require__函数本来就是在bundle.js里定义的:

首先检查main.js是否已经装载在内存里了:

对于我这个例子,显然没有,所以从头开始装载main.js.首先创建一个对象,id为./main.js:

然后执行这个module的函数,即我们实现在main.js里的javascript代码。当然经过webpack的加工,main.js里的代码已经通过eval的方式嵌入到bundle.js里了。

原始的main.js代码:

上述代码被webpack转换之后,main.js里的源代码被替换成了__webpack_require__:

从这里也能看出webpack递归处理module的思路,从webpack.config.js定义的entry module,即main.js出发,在main.js遇到需要require其他mobule的地方,递归进入__webpack_require__:

require("print.js")的执行过程,就是把print.js里定义的print函数本身,赋给module的exports属性:

print.js module装载完毕之后,就可以执行了。

注意第2行代码执行完毕后,html页面就出现了期望的字符:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

转载地址:http://lqvkx.baihongyu.com/

你可能感兴趣的文章
南大领衔!国内高校团队登上美国《科学进展》杂质,发布基因编辑可控技术...
查看>>
当下一对一直播源码市场空间
查看>>
1月9日云栖精选夜读 | Mars 算法实践——人脸识别
查看>>
.NET快速开发平台核心优势
查看>>
《黑匣子思维》读后感
查看>>
最全技术面试180题:阿里11面试+网易+百度+美团!
查看>>
SparkSQL Catalyst解析
查看>>
jSearch(聚搜) 1.0.0 终于来了
查看>>
Java字节码结构剖析二:字段表
查看>>
盘点2018云计算市场,变化大于需求?
查看>>
极光推送(一)集成
查看>>
Android项目实战(三十九):Android集成Unity3D项目(图文详解)
查看>>
MySQL 8.0 压缩包版安装方法
查看>>
TensorFlow系列专题(六):实战项目Mnist手写数据集识别
查看>>
JS中this的4种绑定规则
查看>>
Netty Pipeline源码分析(2)
查看>>
@Transient注解输出空间位置属性
查看>>
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
开发者报 | Github造假产业链曝光,花钱就能买Star;黑客又多一个可以偷你密码的方法了...
查看>>
git 相关开发常用
查看>>