构建基础Webpack | 青训营

44 阅读4分钟

构建Webpack知识体系

1. 什么是Webpack

Webpack 是一个现代的前端构建工具。它主要用于处理前端项目中的各种资源,如 JavaScript、CSS、图像等,并将这些资源打包成优化过的静态文件,以便在浏览器中加载。Webpack 不仅可以帮助开发者管理和优化资源,还可以实现模块化开发和代码拆分,以提高前端项目的性能和可维护性。

1693028806454.png

2.Webpack的主要功能包括:

  • Webpack 可以将项目中的多个资源文件(如 JavaScript、CSS、图片等)打包成一个或多个 bundle 文件。这有助于减少网络请求次数,提高加载速度。

  • Webpack 集成了加载器(Loaders),可以通过加载器处理不同类型的文件。支持 Babel、ESLint、TypeScript、CoffeeScript、Less、Sass。

  • Webpack 不仅可以处理 JavaScript 模块,还可以处理其他类型的模块,如样式文件(CSS、Less、Sass)和图片等

  • Webpack 提供了开发服务器,支持热模块替换(HMR)。这使得在开发过程中,你可以在不刷新整个页面的情况下实时更新修改,从而提高开发效率。

  • Webpack 可以在开发模式下保持持续监听文件变化,并在文件更改时自动重新构建项目

  • 支持代码分离。

  • Tree-shaking是一个优化技术,可以从项目中移除未使用的代码,以减少最终生成的 bundle 文件的大小。Webpack 支持对 JavaScript 模块进行 Tree-shaking,从而减小生产环境的代码体积。

  • 在构建过程中,Webpack 生成源代码和生成代码之间的映射关系,这被称为 Sourcemap。这在调试阶段非常有用,因为它可以将生成的代码映射回原始源代码,以便更轻松地定位错误和问题。

3. 基础配置Webpack

在了解了Webpack之后,让我们来一起看一下如何使用Webpack对我们的项目进行打包。

1. npm安装Webpack包

npm install webpack webpack-cli --save-dev

2. 创建 Webpack 配置文件: 在项目根目录下创建一个名为 webpack.config.js 的文件,用于配置Webpack。

// webpack.config.js
const path = require('path');

module.exports = {
    entry: './src/index.js', // 入口文件
    output: {
        filename: 'bundle.js', // 输出文件名
        path: path.resolve(__dirname, 'dist') // 输出目录
    }
};

3. 运行 Webpack: 在命令行中运行以下命令,将你的代码打包生成输出文件。

// 这将使用配置文件中指定的入口文件和输出路径来生成一个 bundle 文件。
npx webpack --config webpack.config.js

4. 核心流程

  1. 解析入口文件: Webpack会从配置中的入口文件开始,解析它并找出其依赖的其他模块。

  2. 递归解析依赖: 对于每个模块,Webpack会递归地解析其依赖模块,构建整个依赖图。解析依赖是通过加载器(Loaders)来处理不同类型的文件,例如通过Babel加载器处理JavaScript文件,通过CSS加载器处理样式文件等。

  3. 创建模块: 对每个解析的模块,Webpack会创建一个模块对象,其中包含模块的路径、依赖关系等信息。

  4. 执行加载器: Webpack会根据模块的类型(文件类型)和配置,执行相应的加载器对模块内容进行处理。加载器可以对模块进行转换、编译、压缩等操作。

  5. 模块合并: 加载器处理后,模块的内容被合并到一个大的字符串中,成为一个新的JavaScript模块。

  6. 生成 Chunk: 根据入口和依赖图,Webpack会将模块分配到不同的 Chunk 中。Chunk是一个包含模块的代码块,可以是初始 Chunk(入口文件)、按需加载的 Chunk 等。

  7. 应用插件: Webpack会在不同的构建阶段调用配置中的插件(Plugins),插件可以执行各种任务,如优化、资源管理、代码分析等。

  8. 生成输出文件: 根据配置,Webpack将生成的 Chunk 和其他资源(如HTML文件、图片等)输出到指定目录。输出文件包括打包后的JavaScript文件、样式文件、图片等。

  9. 生成输出文件: 根据配置,Webpack将生成的 Chunk 和其他资源(如HTML文件、图片等)输出到指定目录。输出文件包括打包后的JavaScript文件、样式文件、图片等。

  10. 完成构建: 一旦所有步骤完成,Webpack构建过程就结束了,你将获得一组优化后的文件,可以将它们部署到Web服务器上。

极度简化版

  1. 入口处理: 从entry文件开始,启动编译流程
  2. 依赖解析:从entry文件开始,根据require or import 等语句找到依赖资源
  3. 资源解析: 根据module配置,调用资源转移器,将png、css等非标准JS资源转译为JS内容
  4. 递归调用2、3,直到所有资源都处理完毕
  5. 资源合并打包:将转译后的资源内容合并打包为可直接在浏览器运行的JS文件