Webpack学习——Plugin(插件)

仅作为学习记录,通过 apply 方法注册到钩子,在特定节点执行自定义逻辑,干预打包流程

一、原理

所有 Webpack 插件都必须是 一个类,且包含 apply 方法(Webpack 会自动调用这个方法),核心逻辑:

  1. 插件被加载时,Webpack 传入 Compiler 实例(全局唯一);
  2. 插件在 apply 方法中,通过 Compiler.hooks.xxx.tap() 注册到指定钩子;
  3. 当打包流程走到该钩子时,Webpack 执行插件注册的逻辑。

二、 自定义Plugin

写一个 "打印打包开始和结束" 的插件

  1. 创建LogPlugin.js
javascript 复制代码
// 插件必须是类,类名建议大写开头
class LogPlugin {
  // Webpack 会自动调用 apply 方法,传入 Compiler 实例
  apply(compiler) {
    // 1. 注册到 "compile" 钩子(开始编译时触发,同步钩子用 tap)
    compiler.hooks.compile.tap("LogPlugin", () => {
      console.log("打包开始啦!");
    });

    // 2. 注册到 "done" 钩子(打包完成时触发,同步钩子用 tap)
    compiler.hooks.done.tap("LogPlugin", (stats) => {
      // stats 是打包统计信息,包含打包耗时、模块数等
      const time = stats.endTime - stats.startTime;
      console.log(`打包完成!总耗时:${time}ms`);
    });
  }
}

// 导出插件,供 Webpack 配置使用
module.exports = LogPlugin;
  1. 在 webpack.config.js 中使用插件
  2. 执行 npm run build命令,就能在终端看到结果
相关推荐
炽烈小老头1 天前
【每天学习一点算法 2025/12/19】二叉树的层序遍历
数据结构·学习·算法
xian_wwq1 天前
【学习笔记】数据血缘
笔记·学习·数据血缘
快乐肚皮1 天前
一文了解XSS攻击:分类、原理与全方位防御方案
java·前端·xss
保护我方头发丶1 天前
ESP-wifi-蓝牙
前端·javascript·数据库
map_vis_3d1 天前
JSAPIThree LODModel 性能优化学习笔记:细节层次模型加载
笔记·学习·3d
想学后端的前端工程师1 天前
【Flutter跨平台开发实战指南:从零到上线-web技术栈】
前端·flutter
老王Bingo1 天前
Qwen Code + Chrome DevTools MCP,让爬虫、数据采集、自动化测试效率提升 100 倍
前端·爬虫·chrome devtools
MarkHD1 天前
智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口
学习
lxh01131 天前
2025/12/18 学习总结
学习
董世昌411 天前
什么是扩展运算符?有什么使用场景?
开发语言·前端·javascript