Webpack 的 Loader 和 Plugin

Webpack 中 Loader 与 Plugin 的职责分工,以及它们分别解决什么问题。

#tech / dev / frontend / eng #type / concept #status / growing

[!info] related notes

Webpack 的 Loader 和 Plugin

在 Webpack 里,LoaderPlugin 经常一起出现,但它们解决的问题不是一个层级。

一句话定义

  • Loader 负责把某类模块内容转换成 Webpack 能继续处理的结果
  • Plugin 负责介入整个构建流程,在更高层扩展能力

Loader 在做什么

Webpack 默认只理解 JavaScript 和 JSON。遇到 TypeScript、CSS、Less、图片等资源时,通常需要 Loader 做转换。

例如:

  • ts-loader 把 TypeScript 转成 JavaScript
  • css-loader 解析 CSS 依赖
  • babel-loader 做语法转译

它更像“模块级转换器”。

Plugin 在做什么

Plugin 不只是转一个文件,而是能参与整个构建生命周期。

例如:

  • HtmlWebpackPlugin 生成 HTML
  • DefinePlugin 注入全局常量
  • MiniCssExtractPlugin 抽离 CSS

它更像“构建流程扩展器”。

最核心的区分方式

  • 处理某一类文件怎么变:先想到 Loader
  • 要不要扩展构建阶段能力:先想到 Plugin

最短记忆方式

Loader 管模块转换,Plugin 管构建扩展。

面试要点

来自 loader-vs-plugin-interview-question 的面试视角整理。

一句话回答

Loader 主要解决“某类文件怎么转成可处理模块”的问题,Plugin 主要解决“如何扩展整个构建流程能力”的问题。

最稳的回答主线

  • Loader 面向模块内容转换
  • Plugin 面向构建生命周期扩展
  • 遇到 CSS、TS、图片这类资源转换,通常先想到 Loader
  • 遇到生成 HTML、注入变量、抽离资源这类需求,通常先想到 Plugin

最短记忆方式

Loader 管文件怎么变,Plugin 管流程怎么扩。

创建于 2026/3/19 更新于 2026/5/27