Skip to content

Webpack

快速回答

Webpack 是静态模块打包器。它从 entry 出发解析 import/require,经过 loader 把不同资源转换成模块,通过 plugin 参与整个编译生命周期,最终把模块组织为 chunk 并生成 asset。面试不要只说“把所有文件打成一个包”,因为它支持多入口、动态导入、代码分割和运行时代码。

深入解答

核心概念

  • Entry:模块图遍历起点。
  • Module:Webpack 理解并参与依赖图的资源单元。
  • Loader:把源资源转换成 Webpack 可继续处理的模块。
  • Plugin:通过 compiler/compilation hooks 参与构建生命周期。
  • Chunk:模块按入口、动态导入和优化策略形成的代码块。
  • Asset:最终写入输出目录的文件。
js
// webpack.config.js
const path = require('node:path');

module.exports = {
  mode: 'production',
  entry: './src/index.js',
  output: {
    path: path.resolve(__dirname, 'dist'),
    filename: '[name].[contenthash].js',
    clean: true,
  },
};

配置详解

  • mode 打开对应默认优化,entry 建立图的起点。
  • contenthash 让内容未变化的产物保留文件名,利于长期缓存。
  • clean 清理本次输出目录中的旧资产,不影响源文件。

高频面试追问

Webpack 只能处理 JavaScript 吗?

不是。非 JavaScript 资源通常先经过 loader,或通过 Asset Modules 转成可进入模块图的结果。

Bundle 和 Chunk 一样吗?

Chunk 是构建内部组织单位,asset 是输出文件;一个 chunk 通常生成一个或多个 asset,不能在所有场景下简单画等号。

官方参考:Webpack Concepts