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 插件机制探索
|