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命令,就能在终端看到结果
相关推荐
jktantan3 小时前
Vue keep-alive 切标签后滚动位置回顶?因为 onDeactivated 里读到的 scrollTop 是 0
前端·javascript·vue.js
2601_962885724 小时前
quotes 字段全解:涨跌幅、振幅、换手率的口径与单位
java·前端·spring
excel4 小时前
encodeURI 和 encodeURIComponent 有什么区别?
前端
前端精髓4 小时前
调用openrouter的免费API模型
java·前端·javascript
赛博守夜人4 小时前
AI安全攻防与治理之十四:AI 安全测试不能脱离传统安全,Web、API、移动端与模型攻击面的组合拳
前端·人工智能·安全
开开心心_Every4 小时前
快速隐藏程序工具自定义快捷键一键切换
java·开发语言·前端·spring·智能手机·word·intellij-idea
Nuanyt5 小时前
Agent 学习笔记(下篇三):上线工程、进阶选择与操作界面(Stage 7 / 7.5 / 8 + 延伸路线)
笔记·python·学习·memory·aiagent·harness
networknomad5 小时前
OpenReplay:自己搭的会话回放工具,给前端排错用的
前端·其他
缓慢更新6 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
叼烟扛炮6 小时前
Linux 学习笔记(四十一):TCP 并发演进——从单进程到多线程服务器
linux·运维·服务器·网络·笔记·学习·tcp/ip