webpack流程
2021-12-26 20:29:29 0 举报
webpack流程
作者其他创作
大纲/内容
这个过程在compiler对象上挂载了以下属性:infrastructureLoggerinputFileSystemoutputFileSystemwatchFileSystem
onCompilecallback()
广播compiler.hooks.make
default-options为默认的webpack配置
options和default-options合并
normalModule
广播compiler.hooks.thisCompilation
遍历loader,使用loader方法处理source
new compiler()
loaderContext = this.createLoaderContext( span style=\"font-size: inherit;\
广播compiler.hooks.beforeCompile
广播compiler.hooks.finishModules
compiler.run()
options为传入的webpack配置
normalResolver.resolve()
广播compiler.hooks.shouldEmit
webpack()
compilation.finish()
new Compiler()
广播compiler.hooks.compile
compilation.processModuleDependencies()
runLoaders()
广播compiler.hooks.environment
基于解析结果创建module
compiler.newCompilationParams()
options = new WebpackOptionsDefaulter().process(options);
normalModuleFactory
compilation.buildModule()
SingleEntryPlugin.createDependency()
准备创建compilation的参数
生成文件
调用parser将resource转为ast
使用module工厂基于EntryDependency创建module对象
normalModuleFactory.create()
广播moduleFactory.hooks.afterResolve
Compilation
调用工厂factory()
创建compiler对象并安装插件
调用resolver()基于entryDependency进行解析
compiler.emitAssets()
在compiler上面注册内部插件
广播compiler.hooks.run
创建loaderResolver
module.createLoaderContext()
广播compiler.hooks.afterCompile
resolver()
广播compiler.hooks.addEntry
compiler.readRecords()
广播compiler.hooks.afterEnvironment
整理解析结果
在compiler上面注册用户定义插件
compiler.compile()
factory = this.hooks.factory.call(null)
创建normalResolver
生成module工厂方法factory
createdModule = new NormalModule( result /* resolve结果 */);
广播moduleFactory.hooks.beforeResolve
normalModule.build()
创建EntryDependency对象
广播compilation.hooks.buildModule
包装文件系统并挂载道compiler对象
生成resolver方法
compiler
创建compilation对象
compilation.seal()
广播compilation.hooks.succeedEntry
广播compilation.hooks.succeedModule
广播compiler.hooks.beforeRun
校验传入options是否合法
广播compiler.hooks.compilation
解析loaders
SingleEntryPlugin.createDependency(span style=\"font-size: inherit;\
遍历entryDependency依赖的dependency递归得进行resolve-runloaders-ast的过程
compilation.addEntry()
resolver = this.hooks.resolver.call(null)
0 条评论
下一页