webpack 的理解
静态模块打包工具
在 webpack 看来,项目中的所有资源皆为模块,通过分析模块间的依赖关系,在其内部构建一个依赖图,最终编译输出模块为 HTML、JavaScript、CSS 以及各种静态文件
webpack 构建过程
- 初始化:启动构建,读取与合并配置参数,加载 Plugin、实例化 Compiler
- 编译:从 entry 出发,针对每一个 Module 串行调用对应的 loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归地进行编译处理。
- 输出:将编译后的 Module 组合成 Chunk,将 Chunk 转换成文件,输出到文件系统中。
loader 和 plugin 的区别
- loader 是文件加载器,能够加载资源文件,最终打包到指定的文件中
- plugin 赋予了 webpack 各种灵活的功能,例如打包优化。目的在于解决 loader 无法实现的其他事。
在运行时机上:
- loader 运行在打包文件之前
- plugin 则在整个编译周期都起到作用