NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #825 most downloaded on npm
Packs ECMAScript/CommonJs/AMD modules for the browser. Allows you to split your codebase into multiple bundles, which can be loaded on demand. Supports loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.
Last release 16 days ago
18 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
889 releases · first in 2012
Throw on a write to an imported binding without losing concatenation. (by @alexander-akait in #22141 )
Throw on a write to an imported binding without losing concatenation. (by @alexander-akait in #22141)
Keep the </html> a page was written with, whatever opened the element. (by @aryanraj45 in #22103)
Look an attribute up by what its value decodes to, not how it was spelled. (by @aryanraj45 in #22107)
Minify HTML by what a value says rather than how it was spelled. (by @alexander-akait in #22154)
Follow HTML template form and frameset rules during tree construction. (by @dependabot in #22129)
Keep the whitespace calc() needs around + and - in a custom property. (by @alexander-akait in #22150)
Keep an attribute's delimiter and spell its value back where quoting is frozen. (by @alexander-akait in #22119)
Rewrite an attribute value the source spelled with character references. (by @aryanraj45 in #22110)
Unquote an HTML attribute value carrying a vertical tab. (by @alexander-akait in #22162)
Keep a shadow's spread and canonicalize a merged selector list. (by @alexander-akait in #22101)
Leave out an implied tag and merge adjacent runs on the first pass. (by @aryanraj45 in #22121)
Minify in one pass what a second pass of the CSS minifier used to find. (by @alexander-akait in #22106)
Cover the CSS lookup tables no stylesheet in the corpus reaches. (by @aryanraj45 in #22126)
Keep initial where an engine reads the property's initial keyword apart. (by @aryanraj45 in #22128)
Join the CSS rules a cut leaves adjacent, and keep a value an escape ate. (by @alexander-akait in #22108)
Drop the dead CSS a cut leaves, and join more of the blocks that print alike. (by @alexander-akait in #22111)
Run the printer equivalence suite against Firefox as well as Chrome. (by @aryanraj45 in #22151)
Finish in one CSS pass the joins, drops and collapses left to a second. (by @alexander-akait in #22117)
Move the context module sources into lib/context/. (by @alexander-akait in #22115)
Declare loader context types in JSDoc instead of hand-written .d.ts files. (by @alexander-akait in #22116)
Emit a failing module's stack relative, and name what a tap failed with. (by @alexander-akait in #22122)
Finish in one CSS pass the drops, layer gathers and joins left to a second. (by @alexander-akait in #22120)
Speed up CSS parsing by stepping over dropped selector preludes in bytes. (by @alexander-akait in #22142)
Record hoisted, module and block declarations while parsing, not by re-walking. (by @alexander-akait in #22147)
Fold more enumerated attribute values and drop those naming no keyword. (by @alexander-akait in #22148)
Halve the CSS minifier's browser-version tables by narrowing their element type. (by @alexander-akait in #22140)
Make each optimization.minimize.css switch govern its own rewrite alone. (by @alexander-akait in #22140)
Join the rules a top-level @layer gather leaves meeting at the seam. (by @alexander-akait in #22140)
Gather a CSS layer past a rule that writes only a different one. (by @alexander-akait in #22154)
Order HTML attributes by what reaches the output, and read values decoded. (by @alexander-akait in #22146)
Drop a fallback declaration every browserslist target reads past. (by @alexander-akait in #22158)
Fix module library exports lost under cache or missing behind a re-export. (by @hai-x in #22114)
One column per quarter.
Enable output.module by default with futureDefaults on ESM-capable targets. (by @alexander-akait in #22088 )
Enable output.module by default with futureDefaults on ESM-capable targets. (by @alexander-akait in #22088)
Remove experiments.outputModule, set output.module to emit ESM instead. (by @alexander-akait in #22011)
Add output.copy to copy files and directories into the output directory. (by @alexander-akait in #21938)
Accept a file URL in any spelling Node reads where an absolute path is taken. (by @alexander-akait in #22012)
Minify inline CSS and JSON via renderEmbeddedSource, exporting webpack's own. (by @alexander-akait in #21993)
Export cssMinify and htmlMinify on css.syntax and html.syntax. (by @alexander-akait in #21953)
Make processResult async and let a tap rename the asset it rewrote. (by @alexander-akait in #21854)
Lower a CSS spelling a target cannot read and write a color fallback before one. (by @alexander-akait in #21926)
Allow optional filesystem cache build dependencies. (by @xiaoxiaojx in #21849)
Add output.environment.topLevelAwait and await every async ESM entry. (by @alexander-akait in #21915)
Add unusedSymbols and pseudoClasses, and evaluate a CSS color function. (by @alexander-akait in #21927)
Drop an implied shorthand slot, fold a math function, tighten color conversion. (by @alexander-akait in #21929)
Add module.parser.javascript.specNamespaceObject for spec namespace objects. (by @alexander-akait in #22049)
Drop what is already said or only a gone engine reads, add lowerUnsupported. (by @alexander-akait in #21931)
Add normalizeUrlAttributes, mergeScripts, boolean and token switches. (by @alexander-akait in #21960)
Minify an event handler attribute, and name the production each script body is. (by @alexander-akait in #21968)
Add source-map, asset, module, bailout, federation hints; group config checks. (by @alexander-akait in #21961)
Lower CSS nesting, :dir() and custom at-rules; gate case folding and escapes. (by @alexander-akait in #21950)
Add optimization.minimize.css.mergeDistantRules to join rules across a gap. (by @alexander-akait in #21969)
Minify an embedded body through the embedded path, dropping three html options. (by @alexander-akait in #21936)
Take a minified style attribute's answer whatever quoting it needs. (by @alexander-akait in #21936)
Name chunk imports in the chunk loader, not at each import site. (by @alexander-akait in #22076)
Repair hashed names; under HMR bake hashed url maps and reload moved css names. (by @alexander-akait in #21916)
Enable output.module for module and modern-module library types. (by @alexander-akait in #22071)
Name an anonymous export default class before its static initializers run. (by @alexander-akait in #21910)
Throw on a non-optional read past an undefined DefinePlugin member. (by @alexander-akait in #22017)
Reject a fulfilled async cycle member with the cycle's evaluation error. (by @alexander-akait in #21921)
Escape external requests in generated ESM imports and star reexports. (by @bjohansebas in #22078)
Fix stack overflows in ESM library star reexport cycles with externals. (by @bjohansebas in #22080)
Preserve live bindings when reexporting external ESM exports. (by @bjohansebas in #22082)
Use configured external requests in ESM star reexports; reject property paths. (by @bjohansebas in #22079)
Preserve import attributes on ESM library star reexports of externals. (by @bjohansebas in #22081)
Fail the build when a runtime module's code generation throws while hashing. (by @alexander-akait in #22034)
Settle a css chunk load without a DOM where its stylesheet cannot be read. (by @alexander-akait in #21970)
Await a deferred import's async dependency that is evaluating-async. (by @alexander-akait in #21934)
Keep a color the CSS minifier would round where its channels are read back. (by @alexander-akait in #21923)
Refresh a cached module's resolveOptions from the factory, not the pack. (by @hai-x in #21945)
Read a <script type> decoded, so a reference-spelled type is minified. (by @alexander-akait in #21933)
Read the extension out of a path-scoped rule's alternation, class or braces. (by @alexander-akait in #21946)
Keep an HTML attribute name or list token holding a foreign template delimiter. (by @alexander-akait in #22018)
Answer a name a module does not export from the spec namespace. (by @alexander-akait in #22092)
Give a deferred namespace the spec's exotic shape when the exports are known. (by @alexander-akait in #21939)
Give a JSON, text or CommonJS namespace the spec's exotic shape and identity. (by @alexander-akait in #22087)
Report a missing asset instead of a code generation deadlock. (by @alexander-akait in #21992)
Keep a concatenated CommonJS reference a separate statement, guarding it once. (by @alexander-akait in #21962)
Keep CSS module exports for a direct loader importModule() call. (by @alexander-akait in #22047)
Fix import.meta and require.main, and scope-hoist import.meta.main. (by @alexander-akait in #21973)
Honor resolve.fileSystem and say where module.exprContextCritical moved. (by @alexander-akait in #22091)
Release stale compilation data from nested children and idle watch builds. (by @alexander-akait in #22096)
Resolve a @value once and then localize it, wherever it names an identifier. (by @alexander-akait in #22036)
Release the printed-text store's text when the CSS printer drops it. (by @alexander-akait in #21958)
Skip a foreign dependency whose isLazy is a flag when walking a lazy barrel. (by @alexander-akait in #21998)
Move diagnostics to buildInfo.diagnostics, persisting parse-time bailouts. (by @hai-x in #22055)
Invalidate consumer codegen when an inlined export value changes. (by @xiaoxiaojx in #22020)
Rebuild DelegatedModule when DLL manifest metadata changes. (by @xiaoxiaojx in #22028)
Keep a CSS layer's blocks in order where one of them streams. (by @alexander-akait in #22044)
Refuse inlining const exports across sync cycles with binding reads. (by @xiaoxiaojx in #22085)
Escape a text run ending in </, which the tag after it made a comment of. (by @aryanraj45 in #22086)
Skip JS render sentinel scans on chunks without HTML. (by @xiaoxiaojx in #21974)
Minify an attribute by what its value says, not by how the source spelled it. (by @aryanraj45 in #22095)
Cut allocation and scanning in the CSS and HTML printers, output unchanged. (by @alexander-akait in #21997)
Emit less chunk-loading runtime. (by @alexander-akait in #22094)
Recognize the reflected attributes of frame, frameset, marquee and dir. (by @alexander-akait in #22003)
Drop the neo-async dependency in favor of a faster built-in async helper. (by @alexander-akait in #21959)
Speed up cache serialization by cutting per-object lookups and call frames. (by @alexander-akait in #21994)
Update dependencies and match the ReadFileSync type to Node.js typings. (by @dependabot in #21919)
Match acorn on ** arrows, LS/PS cooking, string export names, program reuse. (by @alexander-akait in #21666)
Parse a regexp literal the running engine cannot build, and keep locations. (by @alexander-akait in #22009)
Parse without acorn, serialize parse-error locations, trim walker allocations. (by @alexander-akait in #21667)
Drop the acorn dependency in favor of webpack's own JavaScript parser. (by @alexander-akait in #22042)
Name HTML chunks after their tags' urls, drop the JS copy, type text/html. (by @alexander-akait in #22008)
Fix import() options, circular reexport severity and namespace writes. (by @alexander-akait in #21867 )
Fix import() options, circular reexport severity and namespace writes. (by @alexander-akait in #21867)
Skip ESM interop when require() targets a module outside the concatenation. (by @hai-x in #21884)
Fix concatenated require() in a require.ensure callback or a computed request. (by @hai-x in #21907)
Keep optimization.minimize a boolean; its options move to minimizeOptions. (by @alexander-akait in #21886)
Fix mangled exports read through require() and a leaked internal reference. (by @alexander-akait in #21905)
Fix new on a default import of a wrapped CommonJS module. (by @alexander-akait in #21876)
Throw when a deferred namespace of an async module is forced while it evaluates. (by @alexander-akait in #21871)
Do not report a missing export for a name a side-effect-free barrel defers. (by @alexander-akait in #21874)
Fix queue, URL scheme, dotenv, HTTP module and persistent cache edge cases. (by @alexander-akait in #21901)
Evaluate a deferred import's async dependencies where the import sits. (by @alexander-akait in #21902)
Omit ambiguous export * names from the module namespace. (by @alexander-akait in #21878)
Fix analyzable ESM baking around cycles, mixed-served wasm and style url maps. (by @alexander-akait in #21851 )
Fix analyzable ESM baking around cycles, mixed-served wasm and style url maps. (by @alexander-akait in #21851)
Minify more HTML and CSS shorthands, and cut two costs off printing. (by @alexander-akait in #21842)
Report a named import that is never read when it names a missing export. (by @alexander-akait in #21856)
Fix ESM circular reexports, cyclic const TDZ, and defer evaluation order. (by @alexander-akait in #21852)
Stop output.html emitting an unused JS chunk for each generated page. (by @alexander-akait in #21859)
Stop emitting the CSS chunk loading runtime when every CSS chunk is initial. (by @alexander-akait in #21862)
Strip a BOM a loader put on a string, and shift a source map that counted it. (by @alexander-akait in #21857)
Fix a capture-group-less snapshot.managedPaths RegExp; speed up cache writes. (by @alexander-akait in #21843 )
Fix a capture-group-less snapshot.managedPaths RegExp; speed up cache writes. (by @alexander-akait in #21843)
Throw SyntaxError, or WebAssembly.CompileError, from an unparsable module. (by @alexander-akait in #21847)
Accept the optimization.minimize: true shorthand set by a plugin in apply(). (by @AgentEnder in #21845)
Wrap concatenated modules in lazy __webpack_require__.cw accessors and inline require() , keeping a wrapped body's names and side effects intact. (by
Wrap concatenated modules in lazy __webpack_require__.cw accessors and inline require(), keeping a wrapped body's names and side effects intact. (by @hai-x in #21519)
Add performance hints reporting what a build costs: duplicate packages and modules, circular dependencies, broad contexts, large modules and chunks, hotspots, eval, missing PURE annotations, polyfills, redundant dynamic imports, OS-dependent rules, cache effectiveness, how chunks load, what splitting refused, why an optimization was skipped, and rules, defines, externals, aliases and barrel reexports nothing uses. An oversized asset names its largest modules, and an entrypoint carrying the runtime recommends optimization.runtimeChunk. Enable every check not set individually with performance.all, report hints in stats only with performance.hints: "stats", and get them in a stable order that leaves the build hashes unchanged. (by @alexander-akait in #21841)
Add the descriptionRelativePath module rule condition. (by @alexander-akait in #21705)
Add OS-independent glob matching to module rules. (by @alexander-akait in #21771)
Report inner-graph, AMD and bare module bailouts in optimizationBailout. (by @alexander-akait in #21740)
Allow marking externals as side-effect-free with a sideEffects flag. (by @alexander-akait in #21712)
Give externals the original request of a context module element. (by @alexander-akait in #21780)
Add the externalsPresets.nodeModules preset with an allowlist option to externalize installed packages, replacing the webpack-node-externals plugin. (by @alexander-akait in #21569)
Add output.library.umdAmdContainer for an AMD-style loader branch in UMD. (by @hai-x in #21770)
Resolve @custom-media values that are true / false or name another custom media. (by @alexander-akait in #21624)
Add the __webpack_css_server_styles__ module variable to read the CSS collected while rendering without a DOM, and keep that CSS in the order the styles were applied. (by @alexander-akait in #21576)
Patch the HTML <head> in place on hot update instead of forcing a full reload, including when a <script> that never executed is removed. (by @alexander-akait in #21624)
Scope counter names in CSS modules; fix the counter() counter-style and animation timeline keywords. (by @alexander-akait in #21600)
Derive import defer / import source from the target and fix the source phase. (by @alexander-akait in #21810)
Emit analyzable ESM urls for chunks, assets, styles, workers and wasm. (by @alexander-akait in #21788)
Tree shake CommonJS: module.exports object literals, exports destructured from a require() binding, unused method requires, and unused side-effect-free require() calls and reexports. (by @alexander-akait in #21841)
Resolve relative entry baseUri values and bake one side of a hash cycle. (by @alexander-akait in #21750)
Minify CSS further, only where the document is unchanged: shorthands and box longhands, font-weight, <position> and font-stretch keywords, colors (polar, Lab and hsl() converted to hex), numbers, times, zero units, calc() and every math function the spec names folded over constants, selector lists, An+B, keyframe selectors, media-feature ranges, unicode-range, transition layers, display, transforms, gradients, font families, identical repeated declarations, and rules an identical later one makes dead. Abilities are read off the target browsers, vendorPrefixes adds and drops vendor prefixes for them, and rewriteCustomProperties shortens custom property values. Minification never changes whether a declaration parses, and beautifying keeps every rule. (by @alexander-akait in #21841)
Safely minify CSS (with source maps) and HTML assets when optimization.minimize is enabled, unless a minimizer is already configured for them, making only transformations an engine cannot tell apart. Every rewrite is named as an option, so it can be switched off. (by @alexander-akait in #21841)
Minify HTML further where the parsed document is unchanged: drop redundant quotes, whitespace nothing renders, escapes text does not need, implied tags, optional end tags nothing prints behind, empty attributes and nested empty elements; fold enumerated values and casing; normalize each attribute against the element it is on; and rewrite style, token lists, srcset, sizes, URL, integer and boolean attributes, viewport content, inline <style> and a JSON <script> body through their own grammars. Adds the optimization.minimize.html options collapseWhitespace, mergeStyles, minifyConditionalComments, minifySrcdoc, preserveComments, removeEmptyAttributes, removeEmptyElements, removeImpliedTags, removeRedundantAttributes, sortAttributes and sortTokenLists, and keeps an end tag the parent, the next element or the adoption agency would otherwise restructure the tree over. (by @alexander-akait in #21841)
Suggest the closest name or a casing fix anywhere in a failed request. (by @alexander-akait in #21727)
Add aggregated shutdown hook to MultiCompiler. (by @bjohansebas in #21578)
Report which compilers changed on the MultiCompiler done hook. (by @bjohansebas in #21580)
Add [containedpath]/[containedfile] placeholders, used for [path]/[file] of asset and html modules with experiments.futureDefaults. (by @alexander-akait in #21592)
Support an object for an entry's html that overrides output.html per option. (by @alexander-akait in #21574)
Configure or exclude each asset type's minifier via optimization.minimize. (by @alexander-akait in #21663)
Support printing CSS and HTML beautified as well as minified. (by @alexander-akait in #21660)
Add renderEmbeddedSource, and minify what it offers out of the box. (by @alexander-akait in #21830)
Report bindings named eval, arguments or reserved words in ES module output. (by @alexander-akait in #21567)
Emit no development source map for module libraries, or any with futureDefaults. (by @alexander-akait in #21839)
Speed up builds and cut memory: faster CSS, HTML and JavaScript parsing and minification, a built-in scope analyzer replacing eslint-scope, faster dependency hot paths, module diagnostics, CommonJS export scanning and concatenated module renaming, runtime modules, parsers, generators and dependencies loaded only when used, one file watcher pool shared between MultiCompiler children, and lower parser, graph and startup memory. (by @alexander-akait in #21841)
Improve tree-shaking for a namespace reexported as default, and fix import d from "./mod"; d.member reading undefined in that case. (by @alexander-akait in #21841)
Warn on cross-kind CSS module export conflicts and let the class win. (by @alexander-akait in #21538)
Add output.resourceHints.dedupe to skip prefetch links for already preloaded/prefetched chunks. (by @alexander-akait in #21386)
Let a memory-cache etag mismatch fall through to the file cache instead of reporting a miss. (by @alexander-akait in #21624)
Determine provided exports in dependency order, so a build's module hashes no longer depend on what the persistent cache held. (by @alexander-akait in #21630)
Emit no dead module and no failing require for an asset-url external. (by @alexander-akait in #21713)
Fix names, hidden devtools and cache reuse for CSS maps inlined into JS. (by @alexander-akait in #21558)
Follow the HTML spec more closely when parsing and printing: frameset content, quirks paragraphs and selects, <![CDATA[ outside foreign content as a bogus comment, <?target data?> as a processing instruction, </> dropped, comment data and DOCTYPE identifiers read from the tokenizer states, attributes merged from a repeated <html>/<body> tag, legacy JavaScript script types, void keygen and font format detection — and hand back the tree a parsed document was built from when printing it. (by @alexander-akait in #21841)
Clear a Watching's blocked flag when its build starts, so it reports only a child actually waiting for its MultiCompiler parent. (by @bjohansebas in #21639)
Fix AMD define() output using the wrong module and exports argument names. (by @hai-x in #21814)
Fix ReferenceError from import.meta.main using the wrong module argument. (by @hai-x in #21620)
Leave a @namespace URI alone instead of resolving and rewriting it as an asset. (by @alexander-akait in #21658)
Resolve escaped CSS names, and scope a grid area cell name as one name. (by @alexander-akait in #21665)
Track exports usage of side-effect-free modules an active import() evaluates. (by @hai-x in #21623)
Resolve absolute symlink targets and treat an unreadable context as missing. (by @alexander-akait in #21647)
Fix corrupted icon URLs in a .webmanifest with a BOM or non-ASCII text. (by @alexander-akait in #21655)
Respect strictThisContextOnImports for require() member calls. (by @hai-x in #21601)
Fix import.meta, [object Object] asset urls and crashes in build-time executed modules. (by @alexander-akait in #21841)
Inherit sideEffects past a type-only nested package.json for files under node_modules. (by @xiaoxiaojx in #21686)
Do not fail directory creation when the file system reports it already exists. (by @alexander-akait in #21698)
Fix top-level using and await using declarations in modules. (by @alexander-akait in #21557)
Fix DefinePlugin optional chains reading an undefined object member. (by @lazerg in #21823)
Fix MultiCompiler: compute the common outputPath by whole path segments, run again after a dependency validation failure, and recover watch mode from a fatal child error without leaking watchings. (by @alexander-akait in #21841)
Keep a nested bundle's runtime tables separate when bundling webpack output. (by @alexander-akait in #21568)
Keep the runtime out of strict mode when output.globalObject reads this. (by @alexander-akait in #21715)
Run an even-priority __webpack_require__.O handler without waiting. (by @alexander-akait in #21803)
Treat top-level this in a classic worker entry as its global scope. (by @alexander-akait in #21720)
Rehash runtime modules whose code changes under a content-named filename. (by @alexander-akait in #21828)
Fix namespace object reexports and string export names in module library output and emit a CommonJS entry's default as export default. (by @alexander-akait in #21589)
Keep tree-shaken JSON arrays as arrays when a prototype property is read. (by @hai-x in #21599)
Generate every CSS and HTML lookup table into lib/{css,html}/data.js from mdn-data, color-name and the spec IDL — including the value-type facts read out of the CSS value-definition grammars — leaving both syntax.js files algorithm only. (by @alexander-akait in #21841)
Support UNC paths in module and context replacement plugins. (by @avivkeller in #21645)
Emit less runtime code: shorter syntax where output.environment allows, no IIFE for a RuntimeModule without locals, no unread __webpack_esm_id__ and exports.id chunk exports, and an ESM entry chunk installing its own modules from its local bindings instead of importing itself. (by @alexander-akait in #21841)
Release the compilation and file system caches retained after compiler.close(). (by @alexander-akait in #21603)
Resolve aliases pointing at a package directory whose name ends with .js again. (by @alexander-akait in #21542 )
Resolve aliases pointing at a package directory whose name ends with .js again. (by @alexander-akait in #21542)
Name CSS sources in source maps by their resource path, without the css prefix. (by @bjohansebas in #21536)
Delete no longer referenced files from the filesystem cache directory after storing the cache, age them by recorded time so restored caches are cleaned too, and collect every fully expired pack in one store instead of one per build. (by @bjohansebas in #21528)
Report "universal" as the loader context target for the universal target. (by @alexander-akait in #21540)
Skip require().prop in dead branches gated by inlined imported constants. (by @hai-x in #21517)
Annotate configuration options and public hooks in the generated types with the @since JSDoc tag. (by @bjohansebas in #21473)
Fix stray semicolon emitted before an imported call following a parenthesized sequence element. (by @alexander-akait in #21533 )
Fix stray semicolon emitted before an imported call following a parenthesized sequence element. (by @alexander-akait in #21533)
Make require(esm) module.exports re-export analysis independent of module processing order. (by @alexander-akait in #21521)
Ignore ERR_SERVER_NOT_RUNNING on lazy-compilation backend dispose so compiler.close() succeeds on Bun. (by @alexander-akait in #21521)
Name the failing key when DefinePlugin fails to evaluate a typeof value. (by @alexander-akait in #21503)
Improve Deno compatibility: guard setNoDelay and force-close connections on lazy-compilation backend dispose, and return a real ArrayBuffer from the Node async/sync wasm loader so WebAssembly.instantiate accepts it. (by @alexander-akait in #21524)
Speed up the HTML parser and cut its peak memory: module-scope helpers/state and tokenizer callbacks, plus exact AST column pre-sizing. (by @alexander-akait in #21492)
Track CommonJS build dependencies by parsing sources when require.cache children are unavailable (e.g. Bun). (by @alexander-akait in #21531)
Cook common string-literal escapes on the JS parser fast path and own the tokenizer's cold-path readers. (by @alexander-akait in #21500)
Build the CSS parseA* AST on the SoA store instead of node classes, cutting parse memory and time. (by @alexander-akait in #21498)
Speed up and cut memory of the experimental CSS and HTML parsers: drop two derivable AST node columns, and scan long string, url, comment, and plaintext token bodies natively. (by @alexander-akait in #21504)
Speed up non-modules CSS parsing: skip redundant token re-reads, drop selector-prelude tokens without materializing nodes, allocate rule preludes lazily, and fast-path empty list seals. (by @alexander-akait in #21511)
Speed up stats generation and cut its peak memory: reuse cached sort comparators instead of thrashing the comparator caches on every sort, and drop redundant module-graph lookups and allocations in the extractors. (by @alexander-akait in #21506)
Speed up CSS parsing: byte-range function-name checks, indexed sibling lookahead. (by @bjohansebas in #21520)
Reduce allocations and redundant work across the code-generation, module-concatenation, exports/usage-analysis, hashing, and chunk-splitting hot paths. (by @alexander-akait in #21516)
Enable the Node.js compile cache in the webpack CLI entry point. (by @bjohansebas in #21523)
Encode the persistent cache with V8's value serializer. (by @avivkeller in #21514)
Speed up SplitChunksPlugin: reject non-subset chunk sets with 64-bit signatures, cache unnamed entry keys, and drop per-module closures. (by @avivkeller in #21529)
Initialize NormalModule._ast in the constructor so each instance keeps a single hidden-class shape. (by @alexander-akait in #21515)
Reduce allocations in the binary serialization hot paths. (by @alexander-akait in #21526)
Deduplicate and simplify several lib modules and speed up AggressiveMergingPlugin. (by @alexander-akait in #21525)
Rename nested const/let __webpack_require__ and __webpack_exports__ declarations in bundled webpack output. (by @hai-x in #21508)
Deprecate the importMetaContext parser option in favor of importMeta.webpackContext . (by @alexander-akait in #21477 )
Default experiments.typescript to "auto", enabling built-in TypeScript support on Node.js >= 22.6 when no TypeScript loader is registered. (by @alexander-akait in #21477)
Default experiments.css, experiments.html and experiments.asyncWebAssembly to "auto", enabling built-in support unless a loader is registered for those files; modules with inline or hook-injected loaders (e.g. html-webpack-plugin templates) keep being parsed as JavaScript. (by @alexander-akait in #21477)
Add output.resourceHints to emit resource hints (preload/prefetch/modulepreload/preconnect), on by default for ESM output, plus module.parser.<type>.urlHints, css.fontPreload and javascript.dynamicImportCssPreload. (by @alexander-akait in #21477)
Add built-in build progress via infrastructureLogging.progress, plus estimatedTime, phaseTimings, progress bar width and progressBar: "auto" on ProgressPlugin. (by @alexander-akait in #21477)
Concatenate CommonJS modules with statically analyzable exports; opt out via optimization.concatenateModules: { commonjs: false }. (by @alexander-akait in #21477)
Wrap "weird" CommonJS modules into module concatenation instead of bailing out. (by @alexander-akait in #21477)
Add output.html.inline (true | "script" | "style") and the webpackInline magic comment to inline chunk content into HTML. (by @alexander-akait in #21477)
Add output.html.inject to control where chunk tags are injected. (by @alexander-akait in #21477)
Add output.html.title, output.html.meta and output.html.base options for head generation. (by @alexander-akait in #21477)
Support per-icon link attributes (sizes, media, color, type, crossorigin) and arrays in output.html.favicon. (by @alexander-akait in #21487)
Add output.html.manifest to generate and link a web app manifest with hashed icons. (by @alexander-akait in #21487)
Add output.html.csp to inject a Content-Security-Policy meta with inline-content hashes and an optional nonce. (by @alexander-akait in #21487)
Add the output.html injectTags compilation hook to inject tags (script/link/meta/…) with injectTo placement. (by @alexander-akait in #21487)
Add the output.html transformTags compilation hook to mutate, remove, or move (between <head> and <body>) a page's existing <script>/<link>/<style>/<meta> tags. (by @alexander-akait in #21487)
Extend the HTML pipeline with html link sources (bundled as their own emitted page) and rel="preload"/"prefetch" links bundled as chunks. (by @alexander-akait in #21477)
Recognize more asset-bearing HTML sources: the twitter:player:stream meta, legacy SVG references, and Web App Manifest icons/screenshots/shortcuts URLs. (by @alexander-akait in #21477)
Add module.parser.html.as to parse HTML as a document or an element fragment. (by @alexander-akait in #21477)
Allow disabling a built-in HTML parser source via type: false in sources. (by @alexander-akait in #21477)
Export webpack.html.HtmlModulesPlugin with transformHtml/htmlEmitted compilation hooks. (by @alexander-akait in #21477)
Resolve @custom-media (including media-type values) and @custom-selector in native CSS. (by @alexander-akait in #21477)
Scope view-transition-name/-group/-class names and ::view-transition-*() pseudo references in CSS modules under customIdents. (by @alexander-akait in #21486)
Add import.meta.glob support, with a caseSensitive option and consistent hidden/node_modules matching. (by @alexander-akait in #21477)
Resolve import.meta.resolve("./asset") to the emitted asset URL via the importMeta.resolve parser option. (by @alexander-akait in #21477)
Add import.meta.env defaults: MODE, DEV, PROD, SSR and BASE_URL. (by @alexander-akait in #21477)
Add fine-grained import.meta parser options. (by @alexander-akait in #21477)
Deprecate the importMetaContext parser option in favor of importMeta.webpackContext. (by @alexander-akait in #21477)
Emit analyzable new URL(…, import.meta.url), worker/worklet URL and import() references with literal specifiers for ESM module output. (by @alexander-akait in #21477)
Compile async modules to generators for targets without async/await. (by @alexander-akait in #21477)
Evaluate and validate the second argument of dynamic import(specifier, options). (by @alexander-akait in #21477)
Add module.parser.javascript.worklet to bundle Worklet addModule() entries. (by @alexander-akait in #21477)
Add ?raw, ?url, ?inline and ?no-inline asset query suffixes under experiments.futureDefaults. (by @alexander-akait in #21477)
Add an interop ("default" | "esModule") hint for object externals to control default-export interop. (by @alexander-akait in #21477)
Add an amd-async externals type that loads AMD externals without an AMD library wrapper. (by @alexander-akait in #21477)
Support cache.compression: "zstd" for the filesystem cache. (by @alexander-akait in #21477)
Warn on strict-mode-only syntax and semantic hazards in ES module output, configurable via the strictModeViolations parser option. (by @alexander-akait in #21477)
Support parsers without location APIs: locations derive from node offsets and AST nodes no longer carry loc. (by @alexander-akait in #21477)
Attach the original DOM event to ChunkLoadError and ScriptExternalLoadError as error.event. (by @alexander-akait in #21477)
Add output.wasmStreamingFallback for wasm fallback on a wrong MIME type. (by @alexander-akait in #21477)
Show why a module was marked as not cacheable in stats output. (by @alexander-akait in #21477)
Expose the active MultiWatching on MultiCompiler.watching. (by @alexander-akait in #21477)
Resolve git merge conflicts when parsing the build-http lockfile. (by @alexander-akait in #21477)
Fix broken HMR with output.module and non-import chunk loading by emitting a plain-JSON hot-update manifest. (by @alexander-akait in #21477)
Fix unused CSS module exports leaking into the JS wrapper. (by @alexander-akait in #21477)
Fix deferred import evaluation: re-throw cached errors, guard forcing a still-evaluating module, keep re-exported deferred namespaces identical, and evaluate initial-chunk deferred context imports lazily. (by @alexander-akait in #21477)
Keep ESM live bindings for a module library's entry exports, including when the runtime is emitted as a separate chunk. (by @alexander-akait in #21477)
Fix SplitChunks merging undersized modules into the wrong result group. (by @alexander-akait in #21477)
Fix named id assignment reusing an already-used numbered suffix, which could produce duplicate module/chunk ids. (by @alexander-akait in #21477)
Fix inlined non-binary asset modules with encoding: false emitting "undefined" instead of their content. (by @alexander-akait in #21477)
Decode non-base64 data URIs as UTF-8 so multi-byte characters are preserved. (by @alexander-akait in #21477)
Keep required JSON data intact when a prototype method (e.g. arr.includes()) is called on it. (by @alexander-akait in #21477)
Recognize modern RegExp flags (d, s, u, v) when statically evaluating new RegExp(...). (by @alexander-akait in #21477)
Merge object-form and dotted DefinePlugin definitions so import.meta.env/process.env are consistent across direct, whole-object and destructured access. (by @alexander-akait in #21477)
Emit an error when an object external has no entry for the used externals type. (by @alexander-akait in #21477)
Fix a persistent cache restore crash when a content section starts exactly on a content-buffer boundary. (by @alexander-akait in #21477)
Restore missing internalSerializables entries (webpack/lib/Module and cold filesystem cache). (by @alexander-akait in #21477)
Fix watch rebuild crash when context symlink targets lack timestampHash. (by @alexander-akait in #21477)
Fix lazy compilation backend leaking idle module entries and hanging on exit. (by @alexander-akait in #21477)
Stop logging benign ECONNRESET client errors from the lazy compilation server. (by @alexander-akait in #21477)
Accept compilations from another webpack copy in getCompilationHooks again. (by @alexander-akait in #21477)
Fix output.html injection edge cases: escaping, head detection, duplicate meta tags, resource-hint/entry-tag retention with inject: false, and stylesheet placement. (by @alexander-akait in #21477)
Ignore a <base> inside an inert <template> when resolving HTML URLs. (by @alexander-akait in #21477)
Bust an HTML page's [contenthash] when its inlined chunk content changes. (by @alexander-akait in #21477)
Fix a dangling stylesheet <link> for a JS-only chunk in an HTML entry. (by @alexander-akait in #21477)
Fix a malformed HTML magic comment leaking a pending webpackInline directive onto the next element. (by @alexander-akait in #21477)
Fix off-by-one dropping the last character of an unterminated url(...) at end-of-input. (by @alexander-akait in #21477)
Consume the trailing whitespace of a CSS hex escape when unescaping identifiers. (by @alexander-akait in #21477)
Fix [fullhash] in output.webassemblyModuleFilename by dropping a stray brace and requesting the getFullHash runtime module. (by @alexander-akait in #21477)
Fix duplicated errors/warnings in stats output when detail-less entries exceed errorsSpace/warningsSpace. (by @alexander-akait in #21477)
Improve module parse errors with a babel-style code frame and the module type. (by @alexander-akait in #21485)
Fix formatSize rendering sizes of 1 TiB or larger as "undefined". (by @alexander-akait in #21477)
Skip the anonymous default export .name fix-up when name is non-configurable, instead of throwing on pre-ES2015 engines. (by @alexander-akait in #21477)
Escape ? and # in context module regexp identifiers so source map names are not truncated. (by @alexander-akait in #21477)
Resolve directory requests to their index module in scoped DllReferencePlugin. (by @alexander-akait in #21477)
Skip the hasSymbol check in the async module runtime when environment.symbol is set. (by @alexander-akait in #21477)
Use a shared __webpack_require__.cjs helper for wrapped CommonJS modules. (by @alexander-akait in #21477)
Derive ASI positions from source text instead of acorn's onInsertedSemicolon, so custom parsers need not collect semicolons. (by @alexander-akait in #21477)
Avoid a second full parse for auto source type by downgrading module to script in place on a top-level return. (by @alexander-akait in #21477)
Fix exponential-time side-effects analysis on cyclic module graphs by memoizing cycle-free results via Tarjan lowlink. (by @alexander-akait in #21477)
Speed up JavaScript parsing and AST walking and reduce parser memory usage. (by @alexander-akait in #21477)
Speed up CSS and HTML parsing and code generation and reduce parser memory usage. (by @alexander-akait in #21477)
Speed up snapshot creation and reduce its memory usage. (by @alexander-akait in #21477)
Reduce allocations in JS codegen, concatenation, queues and parser setup. (by @alexander-akait in #21477)
Speed up stats generation on large builds by reusing the item context across array items. (by @alexander-akait in #21477)
Memoize loader resolution per compilation to avoid re-resolving the same loader for every matching module. (by @alexander-akait in #21477)
Reuse and harden webpack's shared resource parser in the loader runner. (by @alexander-akait in #21477)
Update webpack-sources to 3.5.1 and enhanced-resolve to 5.24.2 to cut peak memory. (by @alexander-akait in #21477)
Inline the loader-runner package into core. (by @alexander-akait in #21477)
Fix context hash crash on unsupported directory entries like FIFOs and sockets. (by @hai-x in #21484)
Verify internalSerializables in lint:special and regenerate it in fix:special. (by @alexander-akait in #21476)
Default experiments.typescript to "auto", enabling built-in TypeScript support on Node.js >= 22.6 when no TypeScript loader is registered. (by @alexander-akait in #21398)
Default experiments.css, experiments.html and experiments.asyncWebAssembly to "auto", enabling built-in support unless a loader is registered for those files; modules with inline or hook-injected loaders (e.g. html-webpack-plugin templates) keep being parsed as JavaScript. (by @alexander-akait in #21365)
Add output.resourceHints to emit resource hints (preload/prefetch/modulepreload/preconnect), on by default for ESM output, plus module.parser.<type>.urlHints, css.fontPreload and javascript.dynamicImportCssPreload. (by @alexander-akait in #21408)
Add built-in build progress via infrastructureLogging.progress, plus estimatedTime, phaseTimings, progress bar width and progressBar: "auto" on ProgressPlugin. (by @alexander-akait in #21352)
Concatenate CommonJS modules with statically analyzable exports; opt out via optimization.concatenateModules: { commonjs: false }. (by @alexander-akait in #21417)
Wrap "weird" CommonJS modules into module concatenation instead of bailing out. (by @alexander-akait in #21436)
Add output.html.inline (true | "script" | "style") and the webpackInline magic comment to inline chunk content into HTML. (by @alexander-akait in #21260)
Add output.html.inject to control where chunk tags are injected. (by @alexander-akait in #21383)
Add output.html.title, output.html.meta and output.html.base options for head generation. (by @alexander-akait in #21394)
Support per-icon link attributes (sizes, media, color, type, crossorigin) and arrays in output.html.favicon. (by @alexander-akait in #21487)
Add output.html.manifest to generate and link a web app manifest with hashed icons. (by @alexander-akait in #21487)
Add output.html.csp to inject a Content-Security-Policy meta with inline-content hashes and an optional nonce. (by @alexander-akait in #21487)
Add the output.html injectTags compilation hook to inject tags (script/link/meta/…) with injectTo placement. (by @alexander-akait in #21487)
Add the output.html transformTags compilation hook to mutate, remove, or move (between <head> and <body>) a page's existing <script>/<link>/<style>/<meta> tags. (by @alexander-akait in #21487)
Extend the HTML pipeline with html link sources (bundled as their own emitted page) and rel="preload"/"prefetch" links bundled as chunks. (by @alexander-akait in #21346)
Recognize more asset-bearing HTML sources: the twitter:player:stream meta, legacy SVG references, and Web App Manifest icons/screenshots/shortcuts URLs. (by @alexander-akait in #21355)
Add module.parser.html.as to parse HTML as a document or an element fragment. (by @alexander-akait in #21441)
Allow disabling a built-in HTML parser source via type: false in sources. (by @alexander-akait in #21441)
Export webpack.html.HtmlModulesPlugin with transformHtml/htmlEmitted compilation hooks. (by @alexander-akait in #21487)
Resolve @custom-media (including media-type values) and @custom-selector in native CSS. (by @alexander-akait in #21442)
Scope view-transition-name/-group/-class names and ::view-transition-*() pseudo references in CSS modules under customIdents. (by @alexander-akait in #21486)
Add import.meta.glob support, with a caseSensitive option and consistent hidden/node_modules matching. (by @alexander-akait in #21385)
Resolve import.meta.resolve("./asset") to the emitted asset URL via the importMeta.resolve parser option. (by @alexander-akait in #21415)
Add import.meta.env defaults: MODE, DEV, PROD, SSR and BASE_URL. (by @alexander-akait in #21440)
Add fine-grained import.meta parser options. (by @alexander-akait in #21327)
Deprecate the importMetaContext parser option in favor of importMeta.webpackContext. (by @alexander-akait in #21360)
Emit analyzable new URL(…, import.meta.url), worker/worklet URL and import() references with literal specifiers for ESM module output. (by @alexander-akait in #21194)
Compile async modules to generators for targets without async/await. (by @alexander-akait in #21410)
Evaluate and validate the second argument of dynamic import(specifier, options). (by @alexander-akait in #21446)
Add module.parser.javascript.worklet to bundle Worklet addModule() entries. (by @alexander-akait in #21384)
Add ?raw, ?url, ?inline and ?no-inline asset query suffixes under experiments.futureDefaults. (by @alexander-akait in #21379)
Add an interop ("default" | "esModule") hint for object externals to control default-export interop. (by @alexander-akait in #21371)
Add an amd-async externals type that loads AMD externals without an AMD library wrapper. (by @alexander-akait in #21340)
Support cache.compression: "zstd" for the filesystem cache. (by @alexander-akait in #21438)
Warn on strict-mode-only syntax and semantic hazards in ES module output, configurable via the strictModeViolations parser option. (by @alexander-akait in #21387)
Support parsers without location APIs: locations derive from node offsets and AST nodes no longer carry loc. (by @alexander-akait in #21451)
Attach the original DOM event to ChunkLoadError and ScriptExternalLoadError as error.event. (by @alexander-akait in #21388)
Add output.wasmStreamingFallback for wasm fallback on a wrong MIME type. (by @alexander-akait in #21299)
Show why a module was marked as not cacheable in stats output. (by @alexander-akait in #21403)
Expose the active MultiWatching on MultiCompiler.watching. (by @alexander-akait in #21469)
Resolve git merge conflicts when parsing the build-http lockfile. (by @alexander-akait in #21397)
Fix broken HMR with output.module and non-import chunk loading by emitting a plain-JSON hot-update manifest. (by @alexander-akait in #21460)
Fix unused CSS module exports leaking into the JS wrapper. (by @alexander-akait in #21301)
Fix deferred import evaluation: re-throw cached errors, guard forcing a still-evaluating module, keep re-exported deferred namespaces identical, and evaluate initial-chunk deferred context imports lazily. (by @alexander-akait in #21446)
Keep ESM live bindings for a module library's entry exports, including when the runtime is emitted as a separate chunk. (by @alexander-akait in #21349)
Fix SplitChunks merging undersized modules into the wrong result group. (by @alexander-akait in #21356)
Fix named id assignment reusing an already-used numbered suffix, which could produce duplicate module/chunk ids. (by @alexander-akait in #21406)
Fix inlined non-binary asset modules with encoding: false emitting "undefined" instead of their content. (by @alexander-akait in #21406)
Decode non-base64 data URIs as UTF-8 so multi-byte characters are preserved. (by @alexander-akait in #21366)
Keep required JSON data intact when a prototype method (e.g. arr.includes()) is called on it. (by @alexander-akait in #21433)
Recognize modern RegExp flags (d, s, u, v) when statically evaluating new RegExp(...). (by @alexander-akait in #21366)
Merge object-form and dotted DefinePlugin definitions so import.meta.env/process.env are consistent across direct, whole-object and destructured access. (by @alexander-akait in #21419)
Emit an error when an object external has no entry for the used externals type. (by @alexander-akait in #21340)
Fix a persistent cache restore crash when a content section starts exactly on a content-buffer boundary. (by @alexander-akait in #21406)
Restore missing internalSerializables entries (webpack/lib/Module and cold filesystem cache). (by @alexander-akait in #21391)
Fix watch rebuild crash when context symlink targets lack timestampHash. (by @alexander-akait in #21381)
Fix lazy compilation backend leaking idle module entries and hanging on exit. (by @alexander-akait in #21468)
Stop logging benign ECONNRESET client errors from the lazy compilation server. (by @alexander-akait in #21406)
Accept compilations from another webpack copy in getCompilationHooks again. (by @alexander-akait in #21407)
Fix output.html injection edge cases: escaping, head detection, duplicate meta tags, resource-hint/entry-tag retention with inject: false, and stylesheet placement. (by @alexander-akait in #21416)
Ignore a <base> inside an inert <template> when resolving HTML URLs. (by @alexander-akait in #21441)
Bust an HTML page's [contenthash] when its inlined chunk content changes. (by @alexander-akait in #21441)
Fix a dangling stylesheet <link> for a JS-only chunk in an HTML entry. (by @alexander-akait in #21441)
Fix a malformed HTML magic comment leaking a pending webpackInline directive onto the next element. (by @alexander-akait in #21406)
Fix off-by-one dropping the last character of an unterminated url(...) at end-of-input. (by @alexander-akait in #21406)
Consume the trailing whitespace of a CSS hex escape when unescaping identifiers. (by @alexander-akait in #21366)
Fix [fullhash] in output.webassemblyModuleFilename by dropping a stray brace and requesting the getFullHash runtime module. (by @alexander-akait in #21406)
Fix duplicated errors/warnings in stats output when detail-less entries exceed errorsSpace/warningsSpace. (by @alexander-akait in #21406)
Improve module parse errors with a babel-style code frame and the module type. (by @alexander-akait in #21485)
Fix formatSize rendering sizes of 1 TiB or larger as "undefined". (by @alexander-akait in #21366)
Skip the anonymous default export .name fix-up when name is non-configurable, instead of throwing on pre-ES2015 engines. (by @alexander-akait in #21370)
Escape ? and # in context module regexp identifiers so source map names are not truncated. (by @alexander-akait in #21422)
Resolve directory requests to their index module in scoped DllReferencePlugin. (by @alexander-akait in #21437)
Skip the hasSymbol check in the async module runtime when environment.symbol is set. (by @alexander-akait in #21423)
Use a shared __webpack_require__.cjs helper for wrapped CommonJS modules. (by @alexander-akait in #21464)
Derive ASI positions from source text instead of acorn's onInsertedSemicolon, so custom parsers need not collect semicolons. (by @alexander-akait in #21453)
Avoid a second full parse for auto source type by downgrading module to script in place on a top-level return. (by @alexander-akait in #21455)
Fix exponential-time side-effects analysis on cyclic module graphs by memoizing cycle-free results via Tarjan lowlink. (by @alexander-akait in #21373)
Speed up JavaScript parsing and AST walking and reduce parser memory usage. (by @alexander-akait in #21373)
Speed up CSS and HTML parsing and code generation and reduce parser memory usage. (by @alexander-akait in #21332)
Speed up snapshot creation and reduce its memory usage. (by @alexander-akait in #21401)
Reduce allocations in JS codegen, concatenation, queues and parser setup. (by @alexander-akait in #21341)
Speed up stats generation on large builds by reusing the item context across array items. (by @alexander-akait in #21425)
Memoize loader resolution per compilation to avoid re-resolving the same loader for every matching module. (by @alexander-akait in #21435)
Reuse and harden webpack's shared resource parser in the loader runner. (by @alexander-akait in #21392)
Update webpack-sources to 3.5.1 and enhanced-resolve to 5.24.2 to cut peak memory. (by @alexander-akait in #21344)
Inline the loader-runner package into core. (by @alexander-akait in #21249)
Fix context hash crash on unsupported directory entries like FIFOs and sockets. (by @hai-x in #21484)
Verify internalSerializables in lint:special and regenerate it in fix:special. (by @alexander-akait in #21476)
Speed up non-CSS-Modules parsing by not building unused selector AST nodes. (by @alexander-akait in #21324 )
Speed up non-CSS-Modules parsing by not building unused selector AST nodes. (by @alexander-akait in #21324)
Speed up non-CSS-Modules CSS parsing by dropping value tokens nothing reads. (by @alexander-akait in #21324)
Resolve HTML asset URLs against the document <base href>. (by @alexander-akait in #21329)
Add HTML integration tests: generateError output, ignored src, null-char parse. (by @aryanraj45 in #21328)
Reduce CPU and memory overhead of HTML and CSS parsing and code generation. (by @alexander-akait in #21332)
Reduce HTML parser memory and CPU by skipping unused AST nodes. (by @alexander-akait in #21323)
Reduce HTML parser memory by storing the AST in struct-of-arrays form. (by @alexander-akait in #21331)
Key the provided-exports cache on a lazy barrel's still-lazy re-export targets. (by @hai-x in #21326)
Default output.globalObject to globalThis for universal targets. (by @alexander-akait in #21314)
Pass through new URL(...) directory references instead of resolving them. (by @alexander-akait in #21312)
Speed up CSS parsing and reduce CSS AST node memory. (by @alexander-akait in #21285 )
Speed up CSS parsing and reduce CSS AST node memory. (by @alexander-akait in #21285)
Fix HMR codegen crash for harmony accept with unresolved imports. (by @xiaoxiaojx in #21302)
Match harmony accept dependencies by module reference so HMR codegen handles imports without a module or chunk id. (by @alexander-akait in #21303)
Fix lazy barrel deferral of ungrouped side-effect imports. (by @hai-x in #21291 )
Fix lazy barrel deferral of ungrouped side-effect imports. (by @hai-x in #21291)
Respect the node: prefix for node.js core modules used as externals. (by @alexander-akait in #21286)
Fix invalid property access for escaped namespace imports with multi-character mangled export names. (by @xiaoxiaojx in #21280 )
Fix invalid property access for escaped namespace imports with multi-character mangled export names. (by @xiaoxiaojx in #21280)
Add frames to ProfilingPlugin TracingStartedInBrowser event so the trace loads in Chrome DevTools. (by @alexander-akait in #21269)
Treat top-level await and import.meta as ES module markers, matching Node.js syntax detection so no explicit module type is needed. (by @alexander-aka
Treat top-level await and import.meta as ES module markers, matching Node.js syntax detection so no explicit module type is needed. (by @alexander-akait in #21218)
Add a bun target that emits ESM and externalizes bun:* and node.js built-in modules. (by @alexander-akait in #21248)
Support CommonJS reexports via Object.defineProperty value and getter descriptors. (by @alexander-akait in #21129)
Support JSON Schema const when generating CLI flags from a schema. (by @alexander-akait in #21087)
Support JSON Schema if/then/else when generating CLI flags from a schema. (by @alexander-akait in #21087)
Skip import specifiers, require() and import() calls in dead conditional branches gated by inlined imported constants (isDEV ? A : B), evaluated via getCondition. (by @hai-x in #21136)
CSS localIdentName [hash] now resolves to the local ident hash (matching css-loader); use [modulehash] for the module hash. (by @alexander-akait in #21259)
Add CSS parser as option and resolve url() inside HTML style attributes. (by @alexander-akait in #21157)
Add dedicated module classes for all built-in module types. (by @alexander-akait in #21164)
Support .html/.css for the default ./src entry under the html/css experiments. (by @alexander-akait in #21039)
Add defineConfig helper for typed configuration files. (by @alexander-akait in #21169)
Add a deno target (with versions, e.g. deno, deno2, deno1.40) that emits ESM, resolves node.js built-ins via the required node: specifier, and keeps Deno's own import protocols (npm:, jsr:, node:, http(s)://) external. (by @alexander-akait in #21247)
Use module-import for electron externals when the target supports ESM. (by @alexander-akait in #21184)
Add output.environment.logicalAssignment to emit ||= in runtime code when the target supports logical assignment operators. (by @bjohansebas in #21219)
Resolve and rewrite asset URLs inside <iframe srcdoc> in HTML modules. (by @bjohansebas in #21226)
Add HMR support for HTML modules with body/title DOM patching on update. (by @alexander-akait in #21011)
Add css-url html source type extracting url() references from CSS-valued attributes. (by @alexander-akait in #21250)
Add module.parser.html.sources option to disable or customize URL-attribute extraction for HTML modules, with script / script-module / stylesheet / stylesheet-inline types for custom attributes (by @alexander-akait in #21022)
Add module.parser.html.template option to transform HTML module source before parsing. (by @alexander-akait in #21055)
Extract more source URLs in HTML modules (SVG, legacy and obsolete attributes). (by @alexander-akait in #21241)
Inline export default <const> when the default-exported value is a primitive constant. (by @hai-x in #21189)
Support optimization.inlineExports for better tree-shaking. (by @hai-x in #20973)
Re-encode inline hash digests ([contenthash]/[chunkhash]/[fullhash]/[modulehash]) from the full content hash, so they carry full entropy and work under optimization.realContentHash and in dynamically-loaded chunk filenames; also preserve leading zero bytes in base-N digests. (by @alexander-akait in #21267)
Allow tree-shaking unused calls to /*#__NO_SIDE_EFFECTS__*/-annotated (pure) exports across module boundaries. (by @hai-x in #20907)
Defer building unused re-export targets of side-effect-free barrel modules. (by @hai-x in #21165)
Keep export mangling enabled for modules whose namespace object is used as a whole value, by materializing a decoupled namespace object that keeps the original export names. (by @alexander-akait in #21234)
Add output.environment.let option (paired with target's let capability) and emit let/const instead of var in generated runtime code wherever it is safe. Bindings that may be wrapped in runtime-condition if blocks (harmony imports, ConcatenatedModule external imports) continue to use var to preserve function scoping. (by @alexander-akait in #21010)
Add output.html to emit an HTML file per entrypoint, injecting its JS/CSS chunks (including dependOn shared chunks). (by @alexander-akait in #21215)
Add module.parser.javascript.pureFunctions to mark top-level names as side-effect-free for tree shaking. (by @hai-x in #21063)
Add universal to compiler.platform, true for universal targets ("universal" or ["web", "node"]). (by @bjohansebas in #21252)
Add output.strictModuleResolution to gate the runtime MODULE_NOT_FOUND guard. (by @hai-x in #21067)
Support an inline digest in hash path placeholders, e.g. [contenthash:base64:8]. (by @alexander-akait in #21259)
Support [uniqueName] and its [uniquename] alias in template paths. (by @alexander-akait in #21155)
Support CSS in Node for universal targets, collecting styles for SSR. (by @alexander-akait in #21208)
Improve commonjs, node-commonjs and global externals for universal targets. (by @alexander-akait in #21187)
Add a universal target preset (browser + web worker + Node.js + Electron + NW.js) that always outputs ECMAScript modules. (by @alexander-akait in #21214)
Support new Worker(new URL(...)) in universal (node + web) targets by resolving the Worker constructor from worker_threads when no global Worker exists. (by @alexander-akait in #21195)
Add output.workerChunkFilename and entry.worker for worker chunk filenames. (by @alexander-akait in #21128)
Skip re-parsing the inlined entry module when no renaming is needed. (by @alexander-akait in #21167)
Extend the avoidEntryIife no-parse fast path to multi-entry chunks. (by @alexander-akait in #21173)
Reuse the binary deserialize dispatch table to speed up cache restore. (by @alexander-akait in #21175)
Type buildInfo and buildMeta per module type with shared common properties. (by @alexander-akait in #21172)
Avoid copying module runtime requirements when ownership is not transferred. (by @alexander-akait in #21140)
Keep all CommonJS exports when an exported function accesses them via this. (by @alexander-akait in #21179)
Align CLI color-support detection across Node, Deno and Bun. (by @alexander-akait in #21257)
Include the schema origin path in conflicting-schema CLI argument errors. (by @alexander-akait in #21087)
Reject __proto__, constructor and prototype path segments in cli.processArguments to prevent prototype pollution. (by @alexander-akait in #21057)
Speed up Compilation.deleteAsset and Compilation.renameAsset via a lazy reverse index from asset file name to containing chunks. (by @alexander-akait in #21035)
Fix merging of inner modules' top-level declarations in concatenated modules. (by @alexander-akait in #21170)
Reduce allocations in export hashing and concatenation name lookups. (by @alexander-akait in #21167)
Avoid toLowerCase allocations in CSS keyword comparisons. (by @alexander-akait in #21109)
Speed up CSS identifier escaping with a char-class lookup table. (by @alexander-akait in #21109)
Resolve [fullhash] in url() public paths for inlined CSS export types (style/text/css-style-sheet) at runtime. (by @alexander-akait in #21054)
Avoid quadratic line scan when building CSS module exports source maps. (by @alexander-akait in #21109)
Compute CSS comment source locations lazily. (by @alexander-akait in #21109)
Support inline hash digest and length in CSS module localIdentName placeholders. (by @alexander-akait in #21259)
Resolve full CSS escapes (including hex) in CSS-Modules names, so e.g. \75 rl() matches url(). (by @alexander-akait in #21196)
Reduce CSS parser CPU (hoisted per-call regexes, byte-compared @container pure-mode keywords) and stop retaining parsed comments on the reused parser instance between modules. (by @alexander-akait in #21202)
Reduce CSS build time and memory usage. Per-export CSS dependencies are consolidated into one dependency per module, and hot-path allocations and lookups in CSS code generation and the module-graph cache are trimmed. (by @alexander-akait in #21114)
Cache CSS public-path placeholder offsets per module source to avoid re-materializing and re-scanning the source on every render. (by @alexander-akait in #21054)
Fix CSS tokenizer infinite loops and dropped tokens on malformed input. (by @alexander-akait in #21102)
Speed up CSS identifier unescaping with bulk run flushing. (by @alexander-akait in #21109)
Skip already-visited symlink targets when resolving context hashes so cyclic symlink graphs no longer overflow the queue. (by @alexander-akait in #21088)
Resolve DefinePlugin access to an undefined object member as undefined. (by @alexander-akait in #21040)
Avoid materializing dependency source locations when sorting, keeping them lazy to reduce build time and memory. (by @alexander-akait in #21228)
Speed up serialization deserialize by replacing a Buffer.isBuffer call with a typeof check. (by @hai-x in #21203)
Emit assets with absolute target paths as-is to avoid invalid Windows paths. (by @alexander-akait in #21223)
Add output.environment.spread, output.environment.hasOwn, and output.environment.symbol, and use method shorthand, spread, Object.hasOwn, and an unguarded Symbol in generated runtime code where the environment supports it. (by @alexander-akait in #21188)
Drop the unused loadScript runtime from ESM hot-update bundles. (by @alexander-akait in #21208)
Extend value binding optimization to export default expressions. (by @xiaoxiaojx in #21117)
Reduce ExportInfo memory and cache size for inline-exports metadata. (by @alexander-akait in #21171)
Resolve nested exports info paths iteratively to cut per-level array allocations. (by @alexander-akait in #21137)
Fix stale incremental cache for css, html and asset/source/inline modules. (by @alexander-akait in #21108)
CommonJS tree-shaking no longer drops exports accessed before a deferred require binding. (by @xiaoxiaojx in #21123)
Make CSS-referenced asset available in lazy JS chunk during incremental rebuilds. (by @alexander-akait in #21100)
Correct string/template import specifier parsing for filesystem cache build dependencies and fix module-sharing hostname validation. (by @alexander-akait in #21232)
perf: guard isDeferred() behind experiments.deferImport in ConcatenatedModule (by @shashank-u03 in #21096)
Speed up deterministicGrouping and cached comparators on large builds. (by @alexander-akait in #21197)
Reduce allocations on harmony/commonjs dependency hot paths. (by @alexander-akait in #21180)
Force-load a module's new owning chunk during HMR when its only loaded chunk is removed from a runtime, so it keeps receiving updates. (by @alexander-akait in #21131)
Fix HTML parser adoption agency to handle a nobr shielded by a marker. (by @alexander-akait in #21274)
Expand HTML parser tag/attribute coverage and decode character references. (by @alexander-akait in #21159)
Speed up and reduce allocations in the experimental HTML parser's tokenizer, tree builder, and entity decoder. (by @alexander-akait in #21152)
Speed up the experimental HTML parser and reduce its memory usage. (by @alexander-akait in #21130)
Avoid redundant HTML module work: reuse the dependency-template render across the JS and HTML code-generation passes, and memoize sentinel resolution/content hashing per source. (by @alexander-akait in #21054)
Release inner-graph state after use and speed up inlined-export checks. (by @alexander-akait in #21167)
Reduce JavascriptParser allocations on the walk hot path to speed up parsing and lower memory usage. (by @alexander-akait in #21139)
Reduce CPU and memory overhead of the lazy barrel optimization. (by @alexander-akait in #21213)
Keep the error message in module build errors on engines whose Error.stack omits it. (by @alexander-akait in #21239)
Speed up module concatenation by caching repeated per-module computations. (by @alexander-akait in #21115)
Move the hot flag from Module to NormalModule, where it's actually read and written. (by @alexander-akait in #21028)
Move the weak flag from Dependency to ModuleDependency, where it's actually set. (by @alexander-akait in #21111)
Avoid the entry IIFE for multiple inlined entry modules by renaming collisions. (by @alexander-akait in #21151)
Reject new import.defer(...)/new import.source(...) with member access as a SyntaxError. (by @alexander-akait in #21211)
Avoid ProvidePlugin injection for local CommonJS require bindings that use the same variable name. (by @fireairforce in #21041)
Resolve the global new Worker(new URL(...)) to worker_threads on the node target. (by @alexander-akait in #21217)
Use optional chaining in generated runtime code where the environment supports it. (by @alexander-akait in #21186)
Allow output.path to be the filesystem root by treating EISDIR like EEXIST in mkdirp. (by @alexander-akait in #21223)
Reduce memory by not retaining the source location object on every dependency. (by @alexander-akait in #21183)
Keep the full exports object when a require() binding is re-exported. (by @alexander-akait in #21144)
Replace glob-to-regexp dependency with watchpack's globToRegExp utility. (by @hai-x in #21176)
Shrink the persistent cache: add a NULL_AND_I16 binary tier and inline tiny strings instead of larger far back-references. (by @hai-x in #21210)
Type serializer read/write contexts with positional tuples and fix a ProvideSharedDependency version/request swap. (by @alexander-akait in #21201)
Speed up buildChunkGraph by deriving block modules from the first runtime. (by @alexander-akait in #21166)
Cache re-export target resolution in SideEffectsFlagPlugin for faster builds. (by @alexander-akait in #21085)
Skip pure single-star passthrough modules for export * re-exports. (by @alexander-akait in #21085)
Skip dependency error/warning reporting for unchanged modules on rebuilds. (by @alexander-akait in #21154)
Use value descriptors instead of getters for const export bindings. (by @xiaoxiaojx in #21021)
Apply CSS hot updates on the Node side of a universal target. (by @alexander-akait in #21217)
Guard CSS style export-type injection so it no-ops when there is no document. (by @alexander-akait in #21193)
Avoid building warning stats objects when counting warnings without a filter. (by @alexander-akait in #21198)
Recognize forward-slash Windows absolute paths (e.g. C:/dir) consistently. (by @alexander-akait in #21223)
Reduce per-file overhead in ContextModuleFactory.resolveDependencies by batching alternativeRequests hook calls. Previously the hook was invoked once
Reduce per-file overhead in ContextModuleFactory.resolveDependencies by batching alternativeRequests hook calls. Previously the hook was invoked once per file in the context (with a single-item array), paying per-call overhead (closure allocation, resolverFactory.get, intermediate arrays in RequireContextPlugin) for every file. The hook is now invoked once per directory with all matched files in one batch — RequireContextPlugin's tap already iterates the items array, so the output is unchanged. Steady-state rebuild on a 4000-file require.context drops a further ~15 ms (after the watch-mode purge fix in the same release). (by @alexander-akait in #21020)
Include each external info's runtimeCondition in ConcatenatedModule#updateHash so changes to a concatenated external's runtime condition invalidate persistent caches instead of slipping through with the module id alone. (by @alexander-akait in #21023)
Fix HTML [contenthash] for referenced asset and inline-style URL changes. (by @alexander-akait in #21018)
Resolve chunk-hash placeholders in chunk URLs embedded into extracted HTML. (by @alexander-akait in #21018)
Remove unnecessary __webpack_require__ runtime helpers in ESM library output with multi-module chunks. (by @xiaoxiaojx in #21032)
Rewrite NormalModule#getSideEffectsConnectionState walk as an allocation-light iterative loop instead of a generator trampoline, restoring rebuild performance lost in #20993 while keeping deep import chains stack-safe. (by @alexander-akait in #21014)
Fix runtime ReferenceError on the first activation of a lazy-compiled module when output.library.type produces a closure-wrapped bundle (umd, umd2, amd, amd-require, system). (by @alexander-akait in #21013)
External modules of these types reference closure-bound identifiers like __WEBPACK_EXTERNAL_MODULE_react__, supplied by the library wrapper that is generated once per chunk. When lazyCompilation activates an entry or import for the first time, any external dependency the lazily-built module pulls in arrives in a hot-update chunk that lives outside the original wrapper closure, so its factory body cannot resolve the closure identifier and only a manual page refresh recovers.
The inactive LazyCompilationProxyModule now declares statically-enumerable externals (string and object forms of externals) as its own dependencies, so the initial entry chunk's library wrapper already exposes their closure identifiers. When activation later pulls in those externals through the lazily-compiled module, they resolve to the already-installed factories instead of throwing. Function and RegExp externals are not pre-populated because their effective request set isn't knowable up front.
Fill in missing entryOptions when an async block joins an existing entrypoint. (by @alexander-akait in #21026)
Release per-child codeGenerationResults in MultiCompiler and at Compiler.close to reduce memory retention. (by @alexander-akait in #21015)
Reduce peak memory of SourceMapDevToolPlugin on large builds (closes #20961). (by @alexander-akait in #20963)
Fix slow require.context() / dynamic import() rebuilds in watch mode (#13636). When a file inside a watched context directory changed, NodeWatchFileSystem would call inputFileSystem.purge(contextDir). The enhanced-resolve purge implementation matches cache keys with key.startsWith(contextDir), so the stat cache of every file under the directory was discarded on every rebuild — ContextModuleFactory.resolveDependencies then re-stat-ed the whole tree on each rebuild. Single-file rebuilds on a 4000-file context now reuse the warm stat cache, dropping median rebuild from ~1260 ms to ~650 ms in a local reproduction (≈49%). For directory items that are explicitly watched contexts, purge is now called with { exact: true } (added in enhanced-resolve@5.22.0) so only the directory's own entry is invalidated; file-level changes in the same aggregated event continue to purge file stats and the parent readdir as before. (by @alexander-akait in #21020)
Align the experimental HTML tokenizer with the WHATWG spec: fix offset-range bugs in the script-data, content-mode end-tag, attribute-value, and EOF s
Align the experimental HTML tokenizer with the WHATWG spec: fix offset-range bugs in the script-data, content-mode end-tag, attribute-value, and EOF states; surface tokenizer parse errors to consumers via a new parseError callback ("warning" when the tokenizer recovers and the emitted token is still well-formed, "error" when the offset range is incomplete — e.g. eof-in-tag); and add the full WHATWG named character references table so decodeHtmlEntities handles all named entities (including legacy bare forms like & and multi-code-point entities like ≂̸) with proper longest-prefix backtracking. (by @alexander-akait in #21000)
Tree-shake CommonJS modules imported through a const NAME = require(LITERAL) binding when only static members of NAME are read. Previously webpack treated every export of such modules as referenced (because the bare require() dependency reports EXPORTS_OBJECT_REFERENCED), so unused exports.x = ... assignments remained in the bundle even with usedExports enabled. The parser now forwards NAME.x / NAME.x() / NAME["x"] accesses to the underlying CommonJsRequireDependency as referenced exports, falling back to the full exports object the moment NAME is read in any other context (passed by value, destructured later, accessed with a dynamic key, …). This brings the binding form to parity with the existing destructuring form (const { x } = require(...)). (by @alexander-akait in #21003)
Fix RangeError: Maximum call stack size exceeded thrown from HarmonyImportSideEffectDependency.getModuleEvaluationSideEffectsState on long linear chains of side-effect-free imports. NormalModule.getSideEffectsConnectionState previously descended through HarmonyImportSideEffectDependency.getModuleEvaluationSideEffectsState recursively, adding two stack frames per module, which overflowed V8's stack at a few thousand modules deep. The traversal is now iterative. (by @alexander-akait in #20993)
Fix NormalModuleFactory parser/generator types: (by @alexander-akait in #20999)
module.generator.html now uses HtmlGeneratorOptions instead of EmptyGeneratorOptions (the extract option was hidden from the createGenerator / generator hook types).webassembly/async, webassembly/sync) generator hooks now use EmptyGeneratorOptions instead of EmptyParserOptions.NormalModuleFactory#getParser / createParser / getGenerator / createGenerator are now generic over the module-type string, returning the specific parser/generator class for known types (e.g. JavascriptParser for "javascript/auto", CssGenerator for "css", etc.) instead of always returning the base Parser / Generator.NormalModuleCreateData is now generic over the module type so parser, parserOptions, generator, and generatorOptions are narrowed to the specific class / options for the given type.Link import bindings used inside define(...) callbacks in ES modules. Previously, HarmonyDetectionParserPlugin skipped walking the arguments of define calls in harmony modules, so references to imported bindings inside an inline AMD define factory (e.g. define(function () { console.log(foo); })) were not rewritten to their imported references and could cause ReferenceError at runtime. Inner graph usage analysis is also fixed for the related pattern const fn = function () { foo; }; define(fn);. (by @alexander-akait in #20990)
HTML-entry pipeline (experiments.html + experiments.css): emit <link rel="stylesheet"> tags for CSS chunks reachable from a <script src> entry. Previously when the bundled JS imported CSS, the resulting .css file was emitted to disk but never referenced from the extracted HTML (no <link> tag), and when splitChunks extracted CSS into sibling chunks the HTML cloned the originating <script> for each one — producing <script src="style.js"> pointing at non-existent JS filenames instead of <link rel="stylesheet" href="style.css">. CSS chunks are now sorted by the entrypoint's module post-order index so the <link> tags also appear in source import order, fixing the cascade ordering issue documented in html-webpack-plugin#1838 and webpack/mini-css-extract-plugin#959 for HTML-entry builds. nonce/crossorigin/referrerpolicy are copied from the originating tag onto the emitted <link>. (by @alexander-akait in #21002)
Allow devtool and SourceMapDevToolPlugin (or multiple SourceMapDevToolPlugin instances) to coexist on the same asset. Previously the second instance would silently skip any asset whose info.related.sourceMap had already been set by an earlier instance, and even when it ran the asset had been rewrapped as a RawSource so no source map could be recovered — producing an empty .map file. The plugin now keeps a per-compilation stash of pristine source maps, namespaces its persistent cache entries by the options that affect output, and appends additional related.sourceMap entries instead of overwriting them. The classic workaround of pairing devtool: 'hidden-source-map' with a new webpack.SourceMapDevToolPlugin({ filename: '[file].secondary.map', noSources: true }) now produces both maps in a single build. (by @alexander-akait in #21001)
Narrow TemplatePathFn callback types by context. pathData.chunk is now non-optional for chunk filename callbacks (output.filename, chunkFilename, cssFilename, cssChunkFilename, htmlFilename, htmlChunkFilename, optimization.splitChunks.cacheGroups[*].filename), and pathData.module is non-optional for module filename callbacks (output.assetModuleFilename, per-module generator.filename / generator.outputPath, module.parser.css.localIdentName). (by @alexander-akait in #20987)
Tighten the CreateData typedef in NormalModuleFactory. CreateData now represents the fully-populated value passed to the createModule, module, and createModuleClass hooks (NormalModuleCreateData & { settings: ModuleSettings }), while ResolveData.createData is typed as Partial<CreateData> to reflect the empty initial state. Plugins tapping those hooks no longer need to cast individual fields away from optional. (by @alexander-akait in #20992)
Stop webpackPrefetch / webpackPreload magic comments from leaking across import() call sites that share a webpackChunkName. When two imports targeted the same named chunk and only one of them set webpackPrefetch: true, the prefetch directive was applied from every parent chunk that referenced the named chunk. Prefetch and preload orders are now resolved per import() call site instead of from the shared chunk group's accumulated options. (by @alexander-akait in #20994)
Fix [fullhash:N] and [hash:N] (with length suffix) in output.publicPath not being interpolated at runtime. The detection regex in RuntimePlugin only matched [fullhash] / [hash] without a length suffix, so the PublicPathRuntimeModule was not flagged as a full-hash module and __webpack_require__.p was emitted with the placeholder XXXX left in place (e.g. out/XXXX/) instead of the real hash truncated to the requested length. (by @alexander-akait in #21004)
Re-export ModuleNotFoundError from webpack/lib/ModuleNotFoundError for backward compatibility with old plugins that import it from that path. This re-export will be removed in webpack 6. (by @alexander-akait in #20988)
Add module.generator.javascript.anonymousDefaultExportName option to control whether webpack sets .name to "default" for anonymous default export func
Add module.generator.javascript.anonymousDefaultExportName option to control whether webpack sets .name to "default" for anonymous default export functions and classes per ES spec. Defaults to true for applications and false for libraries (when output.library is set) to avoid unnecessary bundle size overhead. Also extract anonymous default export .name fix-up into a shared runtime helper (__webpack_require__.dn), replacing repeated inline Object.defineProperty / Object.getOwnPropertyDescriptor calls with a single short call per module to reduce output size. (by @xiaoxiaojx in #20894)
Support module concatenation (scope hoisting) for CSS modules with text, css-style-sheet, style, and link export types (by @xiaoxiaojx in #20851)
The generator.exportsConvention function form for CSS modules now accepts string[] in addition to string. (by @alexander-akait in #20914)
Add linkInsert hook to CssLoadingRuntimeModule.getCompilationHooks(compilation) so plugin developers can control where stylesheet <link> elements are inserted into the document. (by @alexander-akait in #20947)
Add CssModulesPlugin.getCompilationHooks(compilation).orderModules hook. (by @alexander-akait in #20978)
Add a pure parser option for css/module and css/auto types matching postcss-modules-local-by-default's pure mode: every selector must contain at least one local class or id, otherwise webpack emits a build error. (by @alexander-akait in #20946)
Support CSS Modules @value identifiers as @import URLs and inside url() functions, e.g. @value path: "./other.css"; @import path; and @value bg: "./image.png"; .a { background: url(bg); } (by @alexander-akait in #20925)
Add experimental TypeScript support via experiments.typescript: true (auto-enabled by experiments.futureDefaults). Uses Node.js's built-in module.stripTypeScriptTypes (Node.js >= 22.6 with the stable mode: "strip" API, including Node.js 26) to transform .ts, .cts, .mts, data:text/typescript, and data:application/typescript modules — no type checking, only erasable TypeScript (types, generics, import type, casts). .tsx/JSX and non-erasable syntax (enum, namespace, parameter-property constructors, decorator metadata) are NOT supported; use a TSX-capable loader (e.g. ts-loader, swc-loader) for those. (by @alexander-akait in #20964)
Added an experiments.html flag that reserves the html module type for the first-class HTML entry-point support. (by @aryanraj45 in #20902)
Preserve defer / source import phase keywords on external dependencies in ESM output, the same way import attributes are preserved. (by @alexander-akait in #20934)
Support the #__NO_SIDE_EFFECTS__ annotation to mark functions as pure for better tree-shaking. (by @hai-x in #20775)
Add module.generator.html.extract for HTML modules and the matching output.htmlFilename / output.htmlChunkFilename filename templates (defaults derived from output.filename / output.chunkFilename with .js swapped for .html, mirroring the CSS pipeline). When extraction is on, the parsed and URL-rewritten HTML is emitted as a standalone .html output file alongside the module's JavaScript export. (by @alexander-akait in #20979)
Add "module-sync" to default conditionNames for resolver defaults to align with Node.js, which exposes the module-sync community condition for synchronously-loadable ESM. (by @alexander-akait in #20933)
Fix CSS modules composes so composes: foo from "./self.module.css" from inside self.module.css no longer creates a duplicate module instance. Fix CSS modules composes parsing so local() and global() function wrappers are tracked per class name. Fix CSS modules composes: ... from "<file>" so the composed files load in an order consistent with every rule's local composes order, instead of source first-appearance order. (by @alexander-akait in #20929)
Avoid emitting the __webpack_require__ runtime in CSS bundles when all imported CSS modules were concatenated into the same scope. (by @alexander-akait in #20936)
Recompute the CSS chunk's [contenthash] and the rendered CSS bytes when an asset referenced by url()/src()/string in CSS changes its hashed filename. (by @alexander-akait in #20938)
Embed an inline sourceMappingURL data URI inside the CSS when the parser.exportType option are text, style, or css-style-sheet. Also merge @imported CSS at build time for text and css-style-sheet exportTypes so the bundle ships a single accurate inline source map covering every contributing file. Map each generated CSS-module class export line in the JS bundle back to its selector position in the original CSS file (e.g. btn: "..." → .btn { ... }). (by @alexander-akait in #20886)
Fix CSS modules deduplication so a .module.<ext> file imported both directly (JS) and via icss (composes from / :import) becomes a single module instance. (by @alexander-akait in #20929)
Preserve @charset at-rule when CSS modules use exportType: "text". (by @alexander-akait in #20912)
Resolve [hash]/[fullhash] placeholders in output.publicPath when generating url() references for experiments.css. (by @alexander-akait in #20879)
Fix HMR for concatenated CSS modules with style exportType by using stable per-module identifiers for injected style elements and tracking inner module IDs of concatenated modules in HMR records (by @xiaoxiaojx in #20911)
Fix CSS Modules @value resolution when the same local name is imported from multiple modules. (by @alexander-akait in #20940)
Fix typeof ns.default / ns.default instanceof X on a static import defer * as ns from "./mod" for default-only and default-with-named external modules under optimization.concatenateModules. The concatenated-module rewrite was collapsing ns.default to the deferred-namespace proxy itself instead of routing through the optimized .a getter (which lazily evaluates the module and returns its default value), so typeof ns.default observed "object" (the proxy) rather than the type of the default. The dynamic exportsType already used .a correctly; default-only and default-with-named now match. (by @alexander-akait in #20910)
Make import defer * as ns more spec-compliant: ns.x = value no longer triggers module evaluation (per the TC39 import-defer [[Set]] algorithm), and the deferred namespace is now a distinct object from the eager namespace, with the same Deferred Module Namespace Exotic Object shared across defer-import call sites for the same module. (by @alexander-akait in #20913)
Fixed spec deviations in the deferred namespace object returned by __webpack_require__.z (import defer * as ns / import.defer(...)). (by @alexander-akait in #20910)
Drop the __webpack_require__, __webpack_require__.d, and __webpack_require__.o runtime helpers from library: { type: "module" } bundles when the on-demand exports source they were emitted for ends up dropped (e.g. a single concatenated entry without an IIFE). (by @alexander-akait in #20901)
Resolve the static specifier of a dynamic import() whose argument is a side-effect-free SequenceExpression, e.g. import((1, 0, "./mod.js")) is now treated the same as import("./mod.js") instead of being rejected as unresolvable. (by @alexander-akait in #20917)
Stable shared module ids and runtime-chunk emission order. (by @imccausl in #20860)
Fix snapshot validity check for context dependencies in watch mode by treating watchpack's existence-only entries ({}) as cache misses. (by @alexander-akait in #20916)
Support no-expression template literals in computed member access (e.g. import.meta[`url`]). (by @alexander-akait in #20889)
Improve tree-shaking in isPure: handle more expression types (ArrayExpression, ObjectExpression, NewExpression, ChainExpression, UnaryExpression (safe operators), MetaProperty, TaggedTemplateExpression, BinaryExpression (strict equality)), prevent /*#__PURE__*/ comments from leaking across ObjectExpression properties, and detect PURE comments inside TemplateLiteral interpolations. (by @alexander-akait in #20723)
Reject new import.defer(...) and new import.source(...) as a parse-time SyntaxError, matching the spec — ImportCall is a CallExpression and is not a valid operand of new. Parenthesized forms (new (import.defer(...))) remain valid and continue to throw TypeError at runtime as before. (by @alexander-akait in #20917)
Escape # characters that appear inside a path-shaped request's directory portion before passing the request to the resolver, so projects located in directories like /home/user/proj#1 (and tools like webpack-dev-server that build entry requests with query strings) resolve correctly. The escape only kicks in when the request contains both a # in the path portion and a ? query string — paths without a query keep their existing semantics. (by @alexander-akait in #20980)
Silence unhandled rejection from the prefetch trigger when chunk loading fails. The ensureChunkHandlers.prefetch runtime created Promise.all(promises).then(...) whose result is discarded by __webpack_require__.e. If chunk loading rejected (e.g. chunkLoadTimeout), that dangling chain produced an unhandled rejection. Prefetch is best-effort, so a no-op rejection handler is now attached. (by @alexander-akait in #20898)
Align require() of an ES module with Node.js's require(esm) "module.exports" named-export convention. When CommonJS require() resolves to an ES module that exports a binding with the literal string name "module.exports" (e.g. export { value as "module.exports" }), require() now returns the value of that export instead of the module's namespace object — matching Node.js v22.12+/v23+ behavior and easing migration of dual ESM/CJS libraries that rely on module.exports = …. The unwrap applies to plain require(), require().foo, calls (require()(…)), destructuring, and to CJS wrappers like module.exports = require(esm) / exports.x = require(esm). (by @alexander-akait in #20981)
Remove outdated @types/eslint-scope package from dependencies. (by @alexander-akait in #20869)
Fix export * resolution when a star-reexported module re-exports a name back to the importer cyclically. Previously, in a graph where a does export * from "./b"; export * from "./c"; and b does export { foo } from "./a"; while c provides the actual foo binding, webpack hoisted foo from b into a's namespace without per-name cycle detection — emitting a getter chain (a.foo → b.foo → a.foo) that threw "Maximum call stack size exceeded" at runtime. The TC39 ResolveExport algorithm requires the cyclic branch to return null and the star loop to fall through to the non-cyclic source. (by @alexander-akait in #20959)
Preserve using declaration initializers when the inner graph optimization is enabled. (by @hai-x in #20906)
Fixed typescript types. (by @alexander-akait in #20880)
Bump webpack-sources to ^3.4.1 and feed asset bytes into hashes via the new Source.prototype.buffers() API. For large ConcatSource/ReplaceSource outputs this avoids the intermediate Buffer.concat that source.buffer() performs, removing a peak-memory spike equal to the source's total size on each hashed asset (AssetGenerator.getFullContentHash, CssIcssExportDependency content hashing, and RealContentHashPlugin). A small benchmark on a 64 MiB ConcatSource shows ~64 MiB lower peak external memory and ~45% faster hashing. (by @alexander-akait in #20897)
CSS @import now inherits the parent module's exportType, so a file configured as "text" correctly creates a style tag when @imported by a "style" pare
CSS @import now inherits the parent module's exportType, so a file configured as "text" correctly creates a style tag when @imported by a "style" parent. (by @xiaoxiaojx in #20838)
Make asset modules available in JS context when referenced from both CSS and a lazily compiled JS chunk. (by @xiaoxiaojx in #20801)
Include missing generator options in hash to ensure persistent cache invalidation when configuration changes (CssGenerator exportsOnly, JsonGenerator JSONParse, WebAssemblyGenerator mangleImports). (by @xiaoxiaojx in #20821)
Fix || default value handling in ProgressPlugin and ManifestPlugin that incorrectly overrode user-provided falsy values (e.g. modules: false, entries: false, entrypoints: false). (by @xiaoxiaojx in #20823)
Migrate from mime-types to mime-db. (by @alexander-akait in #20812)
Handle @charset at-rules in CSS modules. (by @alexander-akait in #20831)
Marked all experimental options in types. (by @alexander-akait in #20814)
Fix two ES5-environment regressions in the anonymous default export .name fix-up: the generated code referenced an undeclared __WEBPACK_DEFAULT_EXPORT
Fix two ES5-environment regressions in the anonymous default export .name fix-up: the generated code referenced an undeclared __WEBPACK_DEFAULT_EXPORT__ binding causing ReferenceError, and used Reflect.defineProperty which is not available in pre-ES2015 runtimes. The fix-up now references the real assignment target and uses Object.defineProperty / Object.getOwnPropertyDescriptor. (by @xiaoxiaojx in #20796)
Prevent !important from being renamed as a local identifier in CSS modules. (by @xiaoxiaojx in #20798)
Use compiler context instead of module context for CSS modules local ident hashing to avoid hash collisions when files with the same name exist in different directories. (by @xiaoxiaojx in #20799)
Implement deprecate flag in schema for better TypeScript support to show which options are already deprecated by the configuration (by @bjohansebas in…
Add exportType: "style" for CSS modules to inject styles into DOM via HTMLStyleElement, similar to style-loader functionality. (by @xiaoxiaojx in #20579)
Add context option support for VirtualUrlPlugin (by @xiaoxiaojx in #20449)
Generate different CssModule instances for different exportType values. (by @xiaoxiaojx in #20590)
Added the localIdentHashFunction option to configure the hash function to be used for hashing. (by @alexander-akait in #20694)
Additionally, the localIdentName option can now be a function.
Added support for destructuring assignment require in cjs, allowing for tree shaking. (by @ahabhgk in #20548)
Added the validate option to enable/disable validation in webpack/plugins/loaders, also implemented API to make it inside plugins. (by @xiaoxiaojx in #20275)
Added source support for async WASM modules. (by @magic-akari in #20364)
Add a static getSourceBasicTypes method to the Module class to prevent errors across multiple versions. (by @xiaoxiaojx in #20614)
Included fragment groups in the conflicting order warning for CSS. (by @aryanraj45 in #20660)
Avoid rendering unused top-level __webpack_exports__ declaration when output ECMA module library. (by @hai-x in #20669)
Fixed resolving in CSS modules. (by @alexander-akait in #20771)
Allow external modules place in async chunks when output ECMA module. (by @hai-x in #20662)
Implement deprecate flag in schema for better TypeScript support to show which options are already deprecated by the configuration (by @bjohansebas in #20432)
Set .name to "default" for anonymous default export functions and classes per ES spec (by @xiaoxiaojx in #20773)
Hash entry chunks after runtime chunks to prevent stale content hash references in watch mode (by @xiaoxiaojx in #20724)
Fix multiple bugs and optimizations in CSS modules: correct third code point position in walkCssTokens number detection, fix multiline CSS comment regex, fix swapped :import/:export error message, fix comma callback incorrectly popping balanced stack, fix cache comparison missing array length check, fix match.index mutation side effect, move publicPathAutoRegex to module scope, precompute merged callbacks in consumeUntil, simplify redundant ternary in CssGenerator, fix typo GRID_TEMPLATE_ARES, remove duplicate grid-column-start, and merge duplicate getCompilationHooks calls. (by @xiaoxiaojx in #20648)
Correct url() path resolution and preserve source maps for non-link CSS export types (style, text, css-style-sheet) (by @xiaoxiaojx in #20717)
Emit error when proxy server returns non-200 status code in HttpUriPlugin instead of silently failing. (by @xiaoxiaojx in #20646)
import.meta as standalone expression now returns a complete object with known properties (url, webpack, main, env) instead of an empty object ({}), and hoists it as a module-level variable to ensure import.meta === import.meta identity. In preserve-unknown mode (ESM output), the hoisted object merges runtime import.meta properties via Object.assign. (by @xiaoxiaojx in #20658)
Fix incorrect condition in FileSystemInfo that always evaluated to false, preventing trailing slash removal from directory paths during build dependency resolution. (by @xiaoxiaojx in #20649)
fix: VirtualUrlPlugin absolute path virtual module IDs getting concatenated with compiler context (by @xiaoxiaojx in #20656)
When a virtual module ID is an absolute path (e.g. virtual:C:/project/user.js), the auto-derived context was incorrectly joined with compiler.context, producing a concatenated path like C:\cwd\C:\project. Now absolute-path contexts are used directly.
All deprecated methods and options now have @deprecated flag in types. (by @alexander-akait in #20707)
Fix CompatibilityPlugin to correctly rename __webpack_require__ when it appears as an arrow function parameter (e.g. (__webpack_module, __webpack_exports, __webpack_require__) => { ... }). (by @hai-x in #20661)
Add Module.getSourceBasicTypes to distinguish basic source types and clarify how modules with non-basic source types like remote still produce JavaScr
Add Module.getSourceBasicTypes to distinguish basic source types and clarify how modules with non-basic source types like remote still produce JavaScript output. (by @xiaoxiaojx in #20546)
Handle createRequire in expressions. (by @alexander-akait in #20549)
Fixed types for multi stats. (by @alexander-akait in #20556)
Remove empty needless js output for normal css module. (by @JSerFeng in #20162)
Update enhanced-resolve to support new features for tsconfig.json. (by @alexander-akait in #20555)
Narrows export presence guard detection to explicit existence checks on namespace imports only, i.e. patterns like "x" in ns. (by @hai-x in #20561)
Context modules now handle rejections correctly. (by @alexander-akait in #20455)
Context modules now handle rejections correctly. (by @alexander-akait in #20455)
Only mark asset modules as side-effect-free when experimental.futureDefaults is set to true, so asset-copying use cases (e.g. import "./x.png") won’t break unless the option is enabled. (by @hai-x in #20535)
Add the missing webpack_exports declaration in certain cases when bundling a JS entry together with non-JS entries (e.g., CSS entry or asset module entry). (by @hai-x in #20463)
Fixed HMR failure for CSS modules with @import when exportType !== "link". When exportType is not "link", CSS modules now behave like JavaScript modules and don't require special HMR handling, allowing @import CSS to work correctly during hot module replacement. (by @xiaoxiaojx in #20514)
Fixed an issue where empty JavaScript files were generated for CSS-only entry points. The code now correctly checks if entry modules have JavaScript source types before determining whether to generate a JS file. (by @xiaoxiaojx in #20454)
Do not crash when a referenced chunk is not a runtime chunk. (by @alexander-akait in #20461)
Fix some types. (by @alexander-akait in #20412)
Ensure that missing module error are thrown after the interception handler (if present), allowing module interception to customize the module factory. (by @hai-x in #20510)
Added createRequire support for ECMA modules. (by @stefanbinoj in #20497)
Added category for CJS reexport dependency to fix issues with ECMA modules. (by @hai-x in #20444)
Implement immutable bytes for bytes import attribute to match tc39 spec. (by @alexander-akait in #20481)
Fixed deterministic search for graph roots regardless of edge order. (by @veeceey in #20452)
Fixed WebpackPluginInstance type regression. (by @alexander-akait in #20440)
WebpackPluginInstance type regression. (by @alexander-akait in #20440)Fix VirtualUrlPlugin Windows compatibility by sanitizing cache keys and filenames. Cache keys now use toSafePath to replace colons (:) with double und
Fix VirtualUrlPlugin Windows compatibility by sanitizing cache keys and filenames. Cache keys now use toSafePath to replace colons (:) with double underscores (__) and sanitize other invalid characters, ensuring compatibility with Windows filesystem restrictions. (by @xiaoxiaojx in #20424)
Revert part of the createRequire generation behavior for require("node:...") to keep compatibility with those modules exports, e.g. const EventEmitter = require("node:events");. (by @hai-x in #20433)
Skip guard collection when exports-presence mode is disabled to improve parsing performance. (by @hai-x in #20433)
Allow resolving worker module by export condition name when using new Worker() (by @hai-x in #20353)
Allow resolving worker module by export condition name when using new Worker() (by @hai-x in #20353)
Detect conditional imports to avoid compile-time linking errors for non-existent exports. (by @hai-x in #20320)
Added the tsconfig option for the resolver options (replacement for tsconfig-paths-webpack-plugin). Can be false (disabled), true (use the default tsconfig.json file to search for it), a string path to tsconfig.json, or an object with configFile and references options. (by @alexander-akait in #20400)
Support import.defer() for context modules. (by @ahabhgk in #20399)
Added support for array values to the devtool option. (by @hai-x in #20191)
Improve rendering node built-in modules for ECMA module output. (by @hai-x in #20255)
Unknown import.meta properties are now determined at runtime instead of being statically analyzed at compile time. (by @xiaoxiaojx in #20312)
Fixed ESM default export handling for .mjs files in Module Federation (by @y-okt in #20189)
Optimized import.meta.env handling in destructuring assignments by using cached stringified environment definitions. (by @xiaoxiaojx in #20313)
Respect the stats.errorStack option in stats output. (by @samarthsinh2660 in #20258)
Fixed a bug where declaring a module variable in module scope would conflict with the default moduleArgument. (by @xiaoxiaojx in #20265)
Fix VirtualUrlPlugin to set resourceData.context for proper module resolution. Previously, when context was not set, it would fallback to the virtual scheme path (e.g., virtual:routes), which is not a valid filesystem path, causing subsequent resolve operations to fail. (by @xiaoxiaojx in #20390)
Fixed Worker self-import handling to support various URL patterns (e.g., import.meta.url, new URL(import.meta.url), new URL(import.meta.url, import.meta.url), new URL("./index.js", import.meta.url)). Workers that resolve to the same module are now properly deduplicated, regardless of the URL syntax used. (by @xiaoxiaojx in #20381)
Reuse the same async entrypoint for the same Worker URL within a module to avoid circular dependency warnings when multiple Workers reference the same resource. (by @xiaoxiaojx in #20345)
Fixed a bug where a self-referencing dependency would have an unused export name when imported inside a web worker. (by @samarthsinh2660 in #20251)
Fix missing export generation when concatenated modules in different chunks share the same runtime in module library bundles. (by @hai-x in #20346)
Fixed import.meta.env.xxx behavior: when accessing a non-existent property, it now returns empty object instead of full object at runtime. (by @xiaoxiaojx in #20289)
Improved parsing error reporting by adding a link to the loader documentation. (by @gaurav10gg in #20244)
Fix typescript types. (by @alexander-akait in #20305)
Add declaration for unused harmony import specifier. (by @hai-x in #20286)
Fix compressibility of modules while retaining portability. (by @dmichon-msft in #20287)
Optimize source map generation: only include ignoreList property when it has content, avoiding empty arrays in source maps. (by @xiaoxiaojx in #20319)
Preserve star exports for dependencies in ECMA module output. (by @hai-x in #20293)
Consider asset modulem to be side-effect free. (by @hai-x in #20352)
Avoid generating JavaScript modules for CSS exports that are not used, reducing unnecessary output and bundle size. (by @xiaoxiaojx in #20337)
c510070: Fixed a user information bypass vulnerability in the HttpUriPlugin plugin.
d3dd841: Use method shorthand to render module content in __webpack_modules__ object.
__webpack_modules__ object.import.meta.env to support object access.base64url, base62, base58, base52, base49, base36, base32 and base25 digests.__webpack_global__.localIdentName hashing for CSS.[fullhash] placeholder in CSS modules.css/global type.import.meta.filename and import.meta.dirname with eval devtools.__webpack_require__.debugId injection when hidden-source-map is used.HookWebpackError.Added DotenvPlugin and top level dotenv option to enable this plugin
DotenvPlugin and top level dotenv option to enable this pluginWebpackManifestPluginignoreList option in devtool pluginsimport.meta.env support for environment variablesimport.meta.dirname and import.meta.filenameimport.defer() for statistical pathimport file from "./file.json" with { type: "json" }__dirname/__filename/import.meta.dirname/import.meta.filename for universal targetexportType option with link (by default), "text" and css-style-sheet valuescomposes propertiesdependOn chunk must be loaded before the common chunkglobalThis supported__dirname and __filename for ES modules__webpack_export__ and __webpack_require__ in already bundled codehashDigest typeSupported extends with env for browserslist
extends with env for browserslistJSONP fragment format for web workers.browserslist.commonjs externals for SystemJS format.import.meta warning messages to be more clear when used directly.Added static analyze for dynamic imports
import file from "./file.ext" with { type: "bytes" } to get the content as Uint8Array (look at example)import file from "./file.ext" with { type: "text" } to get the content as text (look at example)snapshot.contextModule to configure snapshots options for context modulesextractSourceMap option to implement the capabilities of loading source maps by comment, you don't need source-map-loader (look at example)topLevelAwait experiment is now stable (you can remove experiments.topLevelAwait from your webpack.config.js)layers experiment is now stable (you can remove experiments.layers from your webpack.config.js)this exportstimeout attribute of script tages-lexer for mjs files for build dependencies__non_webpack_require__ for ES moduleschunk.auxiliaryFilescreateRequire only when output is ES module and target is nodeFixed resolve execution order issue from extra await in async modules
Fixed syntax error when comment is on the last line
createRequireFilter deleted assets in processAdditionalAssets hook
processAdditionalAssets hookModuleFactory classGetChunkFilename failure caused by dependOn entrymodule.exports bundle to ESM libraryRawModule and condition of isDeferredallowInlineStartupFixed concatenate optimization for ESM that caused undefined export
output.environment.nodePrefixForCoreModules option everywhereoutput.importMetaName option everywheredeferImport option to parser optionsrequire in some placesDependency without the source order attribute must keep their original index
importPhasesPlugin only when enable deferImport (#19689)Tree-shaking unused ignored modules
Fixed the case where an ES modules entry chunk depends on the runtime chunk hash
splitChunks when external variables and runtimeChunk are not set.using keywordnew URL(...)virtual: schemenew URL(...) evaluate expressionHMR might fail if there are new initial chunks
Fixed type error with latest @types/node
@types/nodeDon't skip export generation for default reexport
default reexport (#19463)cause of any errors and errors of AggregateError in stats output@types/json-schema in typesRespect public path for ES modules
module library when mixing commonjs and esm modulesFlagDependencyExportsPlugin for libraries where it requiredControl dead flow for labeled and blockless statements
Fixed terminated state for if/else
if/elseFixed dead control flow with deep nested if/else
if/elseDead control flow for exotic cases
Dead control flow for many cases
Fixed runtime error when using asset module as entrypoint and runtimeChunk
__proto__ propertymodule and module ESM libraries have been union and code generation has been improvedcommonjs-static librarymeta.webpackASTxxhash64 for cache.hashAlgorithm when experiments.futureDefaults enablednew Worker(import.meta.url) and new Worker(new URL(import.meta.url)) syntaxstrict types for typescriptAvoid the deprecation message #19062 by @alexander-akait
filenameTemplate in new split chunk #19104 by @henryqdineenblob: protocol when public path is auto #19199 by @alexander-akaitoutput.charset everywhere #19202 by @alexander-akaitBuildInfo and BuildMeta type definitions #19200 by @inottnFlagDependencyExportsPlugin for large JSON by depth #19058 by @hai-xstartsWith for matching instead of converting the string to a regex #19207 by @inottnnanoid from 3.3.7 to 3.3.8 #19063 by @dependabotDefaultStatsFactoryPlugin #19156 by @Andaristreadme.md by adding video links for understanding webpack #19101 by @Vansh5632/* webpackIgnore: true */ for require.resolve #19201 by @alexander-akaitFull Changelog: https://github.com/webpack/webpack/compare/v5.97.1...v5.98.0
Sub define key should't be renamed when it's a defined variable
Don't crash with filesystem cache and unknown scheme
output.iife is true and output.library.type is umd[uniqueName] to localIdentName when it is emptyMergeDuplicateChunks pluginoutput.cssHeadDataCompression option was deleted@value at-rules in CSS modules:import rules in CSS modulesurl and import options for CSS[Types] Add @types/eslint-scope to dependencieS
@types/eslint-scope to dependencieSvalidateFixed Module Federation should track all referenced chunks
output.environment.dynamicImport to determine chunk format when no browserslist or targetoptimization.avoidEntryIifeoutput.devtoolNamespaceimportModule on the execution stageexport and importcss/auto considers a module depending on its filename as css (pure CSS) or css/local, before it was css/global and css/localnode targeturl()s and @import parsing/* webpackIgnore: true */ for CSS filessrc() supportFixed hanging when attempting to read a symlink-like file that it can't read
default for import context element dependencymodule and import in module-import for externals import'sEnvironmentPlugin default values types less strictoptimization.avoidEntryIife option (true by default for the production mode)Added runtime condition for harmony reexport checked
data/http/https protocols in source mapsbigint optimistic when browserslist not foundwebpackIgnore for new URL() construction@import pathinfo supportGenerate correct relative path to runtime chunks
DefinePlugin quieter under default log levelbinary generator option for asset modules to explicitly keep source maps produced by loadersmodern-module library value for tree shakable outputoverrideStrict option to override strict or non-strict mode for javascript modulesDoesn't crash with an error when the css experiment is enabled and contenthash is used
Correct tidle range's comutation for module federation
subtractRuntime function for runtime logiccss/global type now handles the exports name@keyframe and @property at-rules in css/global typestats.hasWarnings() method now respects the ignoreWarnings optionArrayQueue iterator__webpack_exports_info__.a.b.canMangleCommonJsChunkFormatPlugin pluginchunkLoading option to the import when environment is unknown and output is modulemodule chunkFormat usedcss module type should not allow parser to switch modeimport attributes spec (with keyword)node: prefix for Node.js core modules in runtime codeimportsFields option for resolverInitFragment class for pluginscompileBooleanMatcher util for pluginsInputFileSystem and OutputFileSystem typesesModule generator option for CSS modulesDeserializer for ignored modules doesn't crash
unsafeCache option to be a proxy objectsnapshot.unmanagedPaths optionfs typeslayer/supports/media for external CSS imports__webpack_nonce__ for CSS chunksfetchPriority for CSS chunksproduction mode by default)don't mangle when destructuring a reexport
Stats.toJson() and Stats.toString()use Math.imul in fnv1a32 to avoid loss of precision, directly hash UTF16 values
Math.imul in fnv1a32 to avoid loss of precision, directly hash UTF16 valuessetStatus() of the HMR module should not return an array, which may cause infinite recursion__webpack_exports_info__.xxx.canMangle shouldn't always same as defaultactiveStatetry/catchYour coding agent can read these notes before it upgrades. Set up the MCP server →