You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
我们可以看到,它是一个立即执行函数,该函数的参数是一个数组,并把 entry 所对应的文件作为该数组的第一个元素,那么是不是这是一个约定呢?(我们后面再谈),然后将 main 依赖的 show 作为后续元素,而且我们注意到,它不像 main 一样有 __webpack_require__ 这个参数,这个又是不是是一个约定呢?
这里只是简单的窥探
webpack
的打包过程,能力有限,欢迎交流webpack 构建流程
webpack.config.js
文件里配置的参数,生产最后的配置结果webpack
构建生命周期的事件节点,以做出对应的反应entry
入口文件开始解析文件构建AST语法树,找出每个文件所依赖的文件,递归下去loader配置
找出合适的loader用来对文件进行转换
entry
配置生成代码块chunk
chunk
到文件系统webpack.config.js:
main.js:
show.js:
最后打包到
bundle.js
,现在我们就看看他是长什么样子?我们可以看到,它是一个立即执行函数,该函数的参数是一个数组,并把
entry
所对应的文件作为该数组的第一个元素,那么是不是这是一个约定呢?(我们后面再谈),然后将main
依赖的show
作为后续元素,而且我们注意到,它不像main
一样有__webpack_require__
这个参数,这个又是不是是一个约定呢?好,现在我们来看看立即执行函数里面发生了什么
如上,我们看见,先是定义一个
__webpack_require__
,然后在上面添加一些方法,最后开始模块的加载,我们来讲解加载的流程,先是执行 数组的第一个元素,main,然后里面遇到
__webpack_require__(1)
,自动将 要加载的数值加一,然后去加载show.js
,并将exports
返回,供main
使用,这里我们看见模块加载和SeaJs
一样,是延迟加载的,show 里面的函数,就是SeaJs
中define
函数的factory
参数,详见我写的 seajs 阅读感悟
至此,我们简单的分析了其中的加载原理,但这仅仅是两个模块的情况,那么更复杂的呢?还有里面的
__webpack_require__
的一些方法在这里面都没有体现作用,它们又是干嘛的呢?我们继续
^_^
The text was updated successfully, but these errors were encountered: