0. 执行流程
Compiler(webpack(option)返回Compiler实例) → ContextModuleFactory → NormalModuleFactory → Compilation(compiler.run/watch调用compiler.compile生成Compilation实例)→Parse(转译代码)
1. Compiler
compiler 基本上只是执行最低限度的功能,以维持生命周期运行的功能。 它将所有的加载、打包和写入工作, 都委托到注册过的插件上。Compiler对象包含了Webpack环境所有的配置信息,包含options,loaders,plugins这些信息,这个对象在webpack启动时被实例化,全局唯一。包含一些webpack构建主流程的钩子,如environment、entryOption、run、watchRun、compile、compilation、make、emit、done等钩子
2. NormalModuleFactory
寻找模块的绝对路径并,解析并生成module实例供后续构建使用
3. Compilation
3.1 compilation代表着一次新的编译,包含当前的模块资源、编译生成的资源,变化的文件等,每当检测到一个文件变化,就会创建一个新的 compilation
3.2 它会对应用程序的依赖图中所有模块,进行编译,与compiler相比,compilation代表编译的细粒度过程,包含一些加载(load)、封存(seal)、优化(optimize)、 分块(chunk)、哈希(hash)和重新创建(restore)的钩子
4. Parse
生成源代码AST并转换为ES5代码
5. 依赖循环
构建会循环解析依赖 ,直到模块解析完毕:NormalModuleFactory(resolve) → Compilation(build-module,loader)→ Parse(AST,transform)→Compilation(suceed-module)→NormalModuleFactory(resolve)
模块解析完毕之后,进入剩下的Compilation及Compiler流程
参考链接:
WebPack 插件机制探索