-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
webpack plugin开发相关资料 #96
Comments
webpack 通过 Tapable 来组织这条复杂的生产线。 Webpack 在运行过程中会广播事件,插件只需要监听它所关心的事件,就能加入到这条生产线中,去改变生产线的运作。 Webpack 的事件流机制保证了插件的有序性,使得整个系统扩展性很好。 |
bundle:由多个不同的模块打包生成生成最终的js文件,一个js文件即是1个bundle。 chunk: Graph的组成部分。一般有n个入口=n个bundle=graph中有n个chunk。但假设由于n个入口有m个公共模块会被重复打包,需要分离,最终=n+m个bundle=graph中有n+m个chunk |
[---初始化阶段---]初始化参数:webpack.config.js / shell+yargs(optimist) 获取配置options Compiler:存放输入输出配置+编译器Parser对象 [----构建Graph阶段 1----]入口文件出发,调用所有配置的 Loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理 [before-run]
[----构建Graph阶段 2----][make]是compilation初始化完成触发的事件 通知在WebpackOptionsApply中注册的EntryOptionPlugin插件 [---- 优化Graph----]compilation.seal(cb)根据之前收集的依赖,决定生成多少文件,每个文件的内容是什么. 对每个module和chunk整理,生成编译后的源码,合并,拆分,生成 hash,保存在compilation.assets,compilation.chunk [seal]密封已经开始。不再接受任何Module 根据入口module创建chunk,如果是单入口就只有一个chunk,多入口就有多个chunk; createChunkAssets.jpg [should-emit] 所有需要输出的文件已经生成好,询问插件哪些文件需要输出,哪些不需要。 [emit] 按照 output 中的配置项异步将将最终的文件输出到了对应的 path 中 处理不同的模块规范Commonjs,AMD... [after-emit] [done] if needAdditionalPass needAdditionalPass() 回到compiler.run |
相关介绍文章
The text was updated successfully, but these errors were encountered: