| name | webpack-plugin-authoring |
| description | Writing webpack 5 plugins — hook selection (compiler vs compilation, tap vs tapAsync, processAssets stages), the asset pipeline (emitAsset, source classes, info metadata, source maps), watch-mode and persistent caching (file/context/missing/buildDependencies), plugin lifecycle (constructor purity, multi-compiler isolation, shutdown cleanup), schema-utils validation, WebpackError reporting, jest-worker parallelism, and compatibility patterns (compiler.webpack namespace, peerDependencies, getCompilationHooks WeakMap). Patterns are drawn from production plugins like mini-css-extract-plugin, terser-webpack-plugin, compression-webpack-plugin, and Next.js's webpack plugins. Trigger when writing, reviewing, or debugging webpack 5 plugins — even if the user doesn't explicitly mention "best practices" — anytime an `apply(compiler)` method is being written, hooks are being tapped, or a plugin imports from `webpack-sources`, the rules in this skill apply. |
dot-skills Webpack 5 Plugins Best Practices
Comprehensive guide for writing correct, performant webpack 5 plugins. Contains 44 rules across 8 categories (8 hook + 7 asset + 5 cache + 5 life + 4 schema + 5 diag + 5 perf + 5 compat = 44), ordered by the authoring lifecycle: hook choice is the foundation, then asset manipulation, then caching/watch-mode correctness, then lifecycle hygiene, then user-facing concerns (schema validation, error reporting), then performance, then packaging.
Patterns are derived from webpack/webpack, the webpack-contrib plugin suite (mini-css-extract, terser, compression, copy, css-minimizer), and Next.js's webpack integration in vercel/next.js.
When to Apply
Reference these rules whenever:
- Writing a new plugin (defining
apply(compiler), picking which hook to tap)
- Reviewing existing plugin code for correctness or performance
- Debugging "why isn't my plugin's output showing up" — usually a hook/stage mismatch
- Adding asset manipulation logic (
processAssets, emitAsset, updateAsset)
- Fixing watch-mode staleness or persistent-cache poisoning
- Migrating a plugin from webpack 4 to webpack 5 (or supporting both)
- Publishing a plugin to npm (export shape, peerDependencies, schema)
Rule Categories by Priority
| Priority | Category | Impact | Prefix |
|---|
| 1 | Hook Selection & Tap Patterns | CRITICAL | hook- |
| 2 | Asset Pipeline | CRITICAL | asset- |
| 3 | Caching & Watch Mode | HIGH | cache- |
| 4 | Plugin Lifecycle & State | HIGH | life- |
| 5 | Schema & Options Validation | MEDIUM-HIGH | schema- |
| 6 | Errors, Warnings & Logging | MEDIUM-HIGH | diag- |
| 7 | Performance & Parallelism | MEDIUM | perf- |
| 8 | Compatibility & Packaging | LOW-MEDIUM | compat- |
Quick Reference
1. Hook Selection & Tap Patterns (CRITICAL)
2. Asset Pipeline (CRITICAL)
3. Caching & Watch Mode (HIGH)
4. Plugin Lifecycle & State (HIGH)
5. Schema & Options Validation (MEDIUM-HIGH)
6. Errors, Warnings & Logging (MEDIUM-HIGH)
7. Performance & Parallelism (MEDIUM)
8. Compatibility & Packaging (LOW-MEDIUM)
How to Use
When writing or reviewing plugin code, scan AGENTS.md for the relevant category, then read the individual rule file for the full pattern and rationale.
Reference Files