webpack的构建流程
Webpack 是一个现代 JavaScript 应用程序的静态模块打包器(bundler),它能够将项目中的所有依赖项(包括 JavaScript、图片、CSS 等)打包成一个或多个 bundle。以下是 Webpack 构建流程的基本步骤:
- 初始化:
- Webpack 首先会读取
webpack.config.js
配置文件,这是整个构建过程的起点。
- Webpack 首先会读取
- 编译(Compilation):
- Webpack 会创建一个编译对象(Compiler),用于存储最终生成的资源和各种模块。
- 依赖图构建(Building the Dependency Graph):
- Webpack 从入口文件(entry point)开始,递归地解析文件中的所有依赖项,构建一个依赖图(dependency graph)。这个过程中会使用到 Loader 和 Parser。
- 加载器处理(Loaders Processing):
- 当 Webpack 遇到不同的资源类型时,会使用相应的加载器(loaders)来处理这些资源。Loaders 允许你在编译时处理文件,例如将 Sass 转换为 CSS,或者将图片转换为 Data URL。
- 编译模块(Compiling Modules):
- 通过编译器(Compiler)处理完所有依赖项后,Webpack 会将它们转换成一个具有依赖关系的模块。
- 优化(Optimization):
- Webpack 会使用各种插件(plugins)来优化依赖图,例如 Tree Shaking(移除未引用的代码)、Scope Hoisting(作用域提升)、代码分割(Code Splitting)等。
- 输出(Output):
- 完成优化后,Webpack 会将最终的依赖图输出到一个或多个 bundle 文件中,这些文件会被输出到指定的输出目录(output directory)。
- 持久化缓存(Persistent Caching):
- Webpack 会使用文件系统来缓存编译结果,这样在下一次构建时可以提高构建速度。
- 工作原理
- 缓存构建结果:Webpack 5 会将首次构建的 Module、Chunk、ModuleGraph 等对象序列化后保存到硬盘中。这些对象包含了构建过程中的关键信息,如模块依赖关系、编译结果等。
- 复用缓存:在后续的构建中,Webpack 会检查文件的内容哈希或时间戳,如果文件没有发生变化,则直接使用缓存副本,跳过编译操作。
- 缓存失效策略:如果项目的配置文件或其他依赖项发生变化,缓存会失效,Webpack 将执行完整的构建流程。
- 监听文件变化(Watch for File Changes):
- 如果在配置中启用了监听模式(watch mode),Webpack 会监听文件系统的变化,并在文件发生变化时重新执行构建过程。
- 使用插件(Using Plugins):
- 在整个构建过程中,Webpack 插件(plugins)可以用来执行各种任务,如提供额外的资源、改变输出结果等。
Webpack 的构建流程是高度可配置的,开发者可以根据项目的需要选择合适的加载器和插件来定制构建过程。这种灵活性使得 Webpack 成为现代前端工程化中不可或缺的工具之一。
webpack的构建流程
https://thaneyang.github.io/2024/05/webpack的构建流程.html