- 调用
webpack函数接收config配置信息,并初始化compiler,在此期间会apply所有 webpack 内置的插件;//注册所有的自定义插件 - 每一次新的编译都会实例化一个
compilation对象,记录本次编译的基本信息;进入make阶段,触发compilation.hooks.make钩子,从entry为入口,调用合适的loader对模块源码预处理,转换为标准的JS模块; b. 调用第三方插件acorn对标准JS模块进行分析,收集模块依赖项。同时也会继续递归每个依赖项,收集依赖项的依赖项信息,不断递归下去;最终会得到一颗依赖树🌲; - 最后调用
compilation.sealrender 模块,整合各个依赖项,最后输出一个或多个chunk;compiler.run()
出现的钩子有:beforeRun --> run --> done --> afterDonecompiler.compile()
出现的钩子有:beforeCompile --> compile --> make --> afterCompile。
其中make就是我们关心的编译过程compilation.seal()
打包封装模块compiler.hooks.emit.callAsync()
在seal执行后,关于模块所有信息以及打包后源码信息都存在内存中,emit将它们输出为文件
