Originally created by: renovate[bot]
Originally owned by: luifr10
ℹ️ Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
Release Notes
webpack/webpack (webpack)
### [<[inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51084](https://github.com/inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51084))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.108.3...v5.108.4)
##### Patch Changes
- Speed up non-CSS-Modules parsing by not building unused selector AST nodes. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21324](https://redirect.github.com/webpack/webpack/pull/21324))
- Speed up non-CSS-Modules CSS parsing by dropping value tokens nothing reads. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21324](https://redirect.github.com/webpack/webpack/pull/21324))
- Resolve HTML asset URLs against the document `<base href="">`. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21329](https://redirect.github.com/webpack/webpack/pull/21329))
- Add HTML integration tests: generateError output, ignored src, null-char parse. (by [@aryanraj45](https://redirect.github.com/aryanraj45) in [#21328](https://redirect.github.com/webpack/webpack/pull/21328))
- Reduce CPU and memory overhead of HTML and CSS parsing and code generation. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21332](https://redirect.github.com/webpack/webpack/pull/21332))
- Reduce HTML parser memory and CPU by skipping unused AST nodes. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21323](https://redirect.github.com/webpack/webpack/pull/21323))
- Reduce HTML parser memory by storing the AST in struct-of-arrays form. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21331](https://redirect.github.com/webpack/webpack/pull/21331))
- Key the provided-exports cache on a lazy barrel's still-lazy re-export targets. (by [@hai-x](https://redirect.github.com/hai-x) in [#21326](https://redirect.github.com/webpack/webpack/pull/21326))
- Default `output.globalObject` to `globalThis` for universal targets. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21314](https://redirect.github.com/webpack/webpack/pull/21314))
- Pass through `new URL(...)` directory references instead of resolving them. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21312](https://redirect.github.com/webpack/webpack/pull/21312))
### [<[inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51083](https://github.com/inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51083))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.108.2...v5.108.3)
##### Patch Changes
- Speed up CSS parsing and reduce CSS AST node memory. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21285](https://redirect.github.com/webpack/webpack/pull/21285))
- Fix HMR codegen crash for harmony accept with unresolved imports. (by [@xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#21302](https://redirect.github.com/webpack/webpack/pull/21302))
- Match harmony accept dependencies by module reference so HMR codegen handles imports without a module or chunk id. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21303](https://redirect.github.com/webpack/webpack/pull/21303))
### [<[inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51082](https://github.com/inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51082))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.108.1...v5.108.2)
##### Patch Changes
- Fix lazy barrel deferral of ungrouped side-effect imports. (by [@hai-x](https://redirect.github.com/hai-x) in [#21291](https://redirect.github.com/webpack/webpack/pull/21291))
- Respect the `node:` prefix for node.js core modules used as externals. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21286](https://redirect.github.com/webpack/webpack/pull/21286))
### [<[inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51081](https://github.com/inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51081))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.108.0...v5.108.1)
##### Patch Changes
- Fix invalid property access for escaped namespace imports with multi-character mangled export names. (by [@xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#21280](https://redirect.github.com/webpack/webpack/pull/21280))
- Add frames to ProfilingPlugin TracingStartedInBrowser event so the trace loads in Chrome DevTools. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21269](https://redirect.github.com/webpack/webpack/pull/21269))
### [<[inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51080](https://github.com/inline_block>0](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51080))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.107.2...v5.108.0)
##### Minor Changes
- 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](https://redirect.github.com/alexander-akait) in [#21218](https://redirect.github.com/webpack/webpack/pull/21218))
- Add a `bun` target that emits ESM and externalizes `bun:*` and node.js built-in modules. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21248](https://redirect.github.com/webpack/webpack/pull/21248))
- Support CommonJS reexports via `Object.defineProperty` value and getter descriptors. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21129](https://redirect.github.com/webpack/webpack/pull/21129))
- Support JSON Schema `const` when generating CLI flags from a schema. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21087](https://redirect.github.com/webpack/webpack/pull/21087))
- Support JSON Schema `if`/`then`/`else` when generating CLI flags from a schema. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21087](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/hai-x) in [#21136](https://redirect.github.com/webpack/webpack/pull/21136))
- CSS `localIdentName` `[hash]` now resolves to the local ident hash (matching css-loader); use `[modulehash]` for the module hash. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21259](https://redirect.github.com/webpack/webpack/pull/21259))
- Add CSS parser `as` option and resolve `url()` inside HTML `style` attributes. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21157](https://redirect.github.com/webpack/webpack/pull/21157))
- Add dedicated module classes for all built-in module types. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21164](https://redirect.github.com/webpack/webpack/pull/21164))
- Support `.html`/`.css` for the default `./src` entry under the html/css experiments. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21039](https://redirect.github.com/webpack/webpack/pull/21039))
- Add `defineConfig` helper for typed configuration files. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21169](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#21247](https://redirect.github.com/webpack/webpack/pull/21247))
- Use `module-import` for electron externals when the target supports ESM. (by [@alexander-akait](https://redirect.github.com/alexander-akait) in [#21184](https://redirect.github.com/webpack/webpack/pull/21184))
- Add `output.environment.logicalAssignment` to emit `||=` in runtime code when the target supports logical assignment operators. (by [@bjohansebas](https://redirect.github.com/bjohansebas) in [#21219](https://redirect.github.com/webpack/webpack/pull/21219))
- Resolve and rewrite asset URLs inside `<iframe srcdoc="">` in HTML modules. (by [@​bjohansebas](https://redirect.github.com/bjohansebas) in [#​21226](https://redirect.github.com/webpack/webpack/pull/21226))
- Add HMR support for HTML modules with body/title DOM patching on update. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21011](https://redirect.github.com/webpack/webpack/pull/21011))
- Add `css-url` html source type extracting `url()` references from CSS-valued attributes. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21250](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21022](https://redirect.github.com/webpack/webpack/pull/21022))
- Add `module.parser.html.template` option to transform HTML module source before parsing. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21055](https://redirect.github.com/webpack/webpack/pull/21055))
- Extract more source URLs in HTML modules (SVG, legacy and obsolete attributes). (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21241](https://redirect.github.com/webpack/webpack/pull/21241))
- Inline `export default <const>` when the default-exported value is a primitive constant. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21189](https://redirect.github.com/webpack/webpack/pull/21189))
- Support `optimization.inlineExports` for better tree-shaking. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​20973](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21267](https://redirect.github.com/webpack/webpack/pull/21267))
- Allow tree-shaking unused calls to `/*#__NO_SIDE_EFFECTS__*/`-annotated (pure) exports across module boundaries. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​20907](https://redirect.github.com/webpack/webpack/pull/20907))
- Defer building unused re-export targets of side-effect-free barrel modules. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21165](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21234](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21010](https://redirect.github.com/webpack/webpack/pull/21010))
- Add `output.html` to emit an HTML file per entrypoint, injecting its JS/CSS chunks (including `dependOn` shared chunks). (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21215](https://redirect.github.com/webpack/webpack/pull/21215))
- Add `module.parser.javascript.pureFunctions` to mark top-level names as side-effect-free for tree shaking. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21063](https://redirect.github.com/webpack/webpack/pull/21063))
- Add `universal` to `compiler.platform`, true for universal targets (`"universal"` or `["web", "node"]`). (by [@​bjohansebas](https://redirect.github.com/bjohansebas) in [#​21252](https://redirect.github.com/webpack/webpack/pull/21252))
- Add `output.strictModuleResolution` to gate the runtime `MODULE_NOT_FOUND` guard. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21067](https://redirect.github.com/webpack/webpack/pull/21067))
- Support an inline digest in hash path placeholders, e.g. `[contenthash:base64:8]`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21259](https://redirect.github.com/webpack/webpack/pull/21259))
- Support `[uniqueName]` and its `[uniquename]` alias in template paths. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21155](https://redirect.github.com/webpack/webpack/pull/21155))
- Support CSS in Node for universal targets, collecting styles for SSR. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21208](https://redirect.github.com/webpack/webpack/pull/21208))
- Improve commonjs, node-commonjs and global externals for universal targets. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21187](https://redirect.github.com/webpack/webpack/pull/21187))
- Add a `universal` target preset (browser + web worker + Node.js + Electron + NW\.js) that always outputs ECMAScript modules. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21214](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21195](https://redirect.github.com/webpack/webpack/pull/21195))
- Add `output.workerChunkFilename` and `entry.worker` for worker chunk filenames. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21128](https://redirect.github.com/webpack/webpack/pull/21128))
##### Patch Changes
- Skip re-parsing the inlined entry module when no renaming is needed. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21167](https://redirect.github.com/webpack/webpack/pull/21167))
- Extend the avoidEntryIife no-parse fast path to multi-entry chunks. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21173](https://redirect.github.com/webpack/webpack/pull/21173))
- Reuse the binary deserialize dispatch table to speed up cache restore. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21175](https://redirect.github.com/webpack/webpack/pull/21175))
- Type `buildInfo` and `buildMeta` per module type with shared common properties. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21172](https://redirect.github.com/webpack/webpack/pull/21172))
- Avoid copying module runtime requirements when ownership is not transferred. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21140](https://redirect.github.com/webpack/webpack/pull/21140))
- Keep all CommonJS exports when an exported function accesses them via `this`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21179](https://redirect.github.com/webpack/webpack/pull/21179))
- Align CLI color-support detection across Node, Deno and Bun. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21257](https://redirect.github.com/webpack/webpack/pull/21257))
- Include the schema origin path in conflicting-schema CLI argument errors. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21087](https://redirect.github.com/webpack/webpack/pull/21087))
- Reject `__proto__`, `constructor` and `prototype` path segments in `cli.processArguments` to prevent prototype pollution. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21057](https://redirect.github.com/webpack/webpack/pull/21057))
- Speed up `Compilation.deleteAsset` and `Compilation.renameAsset` via a lazy reverse index from asset file name to containing chunks. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21035](https://redirect.github.com/webpack/webpack/pull/21035))
- Fix merging of inner modules' top-level declarations in concatenated modules. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21170](https://redirect.github.com/webpack/webpack/pull/21170))
- Reduce allocations in export hashing and concatenation name lookups. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21167](https://redirect.github.com/webpack/webpack/pull/21167))
- Avoid toLowerCase allocations in CSS keyword comparisons. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21109](https://redirect.github.com/webpack/webpack/pull/21109))
- Speed up CSS identifier escaping with a char-class lookup table. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21109](https://redirect.github.com/webpack/webpack/pull/21109))
- Resolve `[fullhash]` in `url()` public paths for inlined CSS export types (`style`/`text`/`css-style-sheet`) at runtime. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21054](https://redirect.github.com/webpack/webpack/pull/21054))
- Avoid quadratic line scan when building CSS module exports source maps. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21109](https://redirect.github.com/webpack/webpack/pull/21109))
- Compute CSS comment source locations lazily. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21109](https://redirect.github.com/webpack/webpack/pull/21109))
- Support inline hash digest and length in CSS module `localIdentName` placeholders. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21259](https://redirect.github.com/webpack/webpack/pull/21259))
- Resolve full CSS escapes (including hex) in CSS-Modules names, so e.g. `\75 rl()` matches `url()`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21196](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21202](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21114](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21054](https://redirect.github.com/webpack/webpack/pull/21054))
- Fix CSS tokenizer infinite loops and dropped tokens on malformed input. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21102](https://redirect.github.com/webpack/webpack/pull/21102))
- Speed up CSS identifier unescaping with bulk run flushing. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21109](https://redirect.github.com/webpack/webpack/pull/21109))
- Skip already-visited symlink targets when resolving context hashes so cyclic symlink graphs no longer overflow the queue. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21088](https://redirect.github.com/webpack/webpack/pull/21088))
- Resolve `DefinePlugin` access to an undefined object member as `undefined`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21040](https://redirect.github.com/webpack/webpack/pull/21040))
- Avoid materializing dependency source locations when sorting, keeping them lazy to reduce build time and memory. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21228](https://redirect.github.com/webpack/webpack/pull/21228))
- Speed up serialization deserialize by replacing a Buffer.isBuffer call with a typeof check. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21203](https://redirect.github.com/webpack/webpack/pull/21203))
- Emit assets with absolute target paths as-is to avoid invalid Windows paths. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21223](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21188](https://redirect.github.com/webpack/webpack/pull/21188))
- Drop the unused loadScript runtime from ESM hot-update bundles. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21208](https://redirect.github.com/webpack/webpack/pull/21208))
- Extend value binding optimization to export default expressions. (by [@​xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#​21117](https://redirect.github.com/webpack/webpack/pull/21117))
- Reduce ExportInfo memory and cache size for inline-exports metadata. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21171](https://redirect.github.com/webpack/webpack/pull/21171))
- Resolve nested exports info paths iteratively to cut per-level array allocations. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21137](https://redirect.github.com/webpack/webpack/pull/21137))
- Fix stale incremental cache for css, html and asset/source/inline modules. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21108](https://redirect.github.com/webpack/webpack/pull/21108))
- CommonJS tree-shaking no longer drops exports accessed before a deferred require binding. (by [@​xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#​21123](https://redirect.github.com/webpack/webpack/pull/21123))
- Make CSS-referenced asset available in lazy JS chunk during incremental rebuilds. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21100](https://redirect.github.com/webpack/webpack/pull/21100))
- Correct string/template import specifier parsing for filesystem cache build dependencies and fix module-sharing hostname validation. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21232](https://redirect.github.com/webpack/webpack/pull/21232))
- perf: guard isDeferred() behind experiments.deferImport in ConcatenatedModule (by [@​shashank-u03](https://redirect.github.com/shashank-u03) in [#​21096](https://redirect.github.com/webpack/webpack/pull/21096))
- Speed up deterministicGrouping and cached comparators on large builds. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21197](https://redirect.github.com/webpack/webpack/pull/21197))
- Reduce allocations on harmony/commonjs dependency hot paths. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21180](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21131](https://redirect.github.com/webpack/webpack/pull/21131))
- Fix HTML parser adoption agency to handle a `nobr` shielded by a marker. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21274](https://redirect.github.com/webpack/webpack/pull/21274))
- Expand HTML parser tag/attribute coverage and decode character references. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21159](https://redirect.github.com/webpack/webpack/pull/21159))
- Speed up and reduce allocations in the experimental HTML parser's tokenizer, tree builder, and entity decoder. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21152](https://redirect.github.com/webpack/webpack/pull/21152))
- Speed up the experimental HTML parser and reduce its memory usage. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21130](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21054](https://redirect.github.com/webpack/webpack/pull/21054))
- Release inner-graph state after use and speed up inlined-export checks. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21167](https://redirect.github.com/webpack/webpack/pull/21167))
- Reduce JavascriptParser allocations on the walk hot path to speed up parsing and lower memory usage. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21139](https://redirect.github.com/webpack/webpack/pull/21139))
- Reduce CPU and memory overhead of the lazy barrel optimization. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21213](https://redirect.github.com/webpack/webpack/pull/21213))
- Keep the error message in module build errors on engines whose `Error.stack` omits it. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21239](https://redirect.github.com/webpack/webpack/pull/21239))
- Speed up module concatenation by caching repeated per-module computations. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21115](https://redirect.github.com/webpack/webpack/pull/21115))
- Move the `hot` flag from `Module` to `NormalModule`, where it's actually read and written. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21028](https://redirect.github.com/webpack/webpack/pull/21028))
- Move the `weak` flag from `Dependency` to `ModuleDependency`, where it's actually set. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21111](https://redirect.github.com/webpack/webpack/pull/21111))
- Avoid the entry IIFE for multiple inlined entry modules by renaming collisions. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21151](https://redirect.github.com/webpack/webpack/pull/21151))
- Reject `new import.defer(...)`/`new import.source(...)` with member access as a SyntaxError. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21211](https://redirect.github.com/webpack/webpack/pull/21211))
- Avoid `ProvidePlugin` injection for local CommonJS require bindings that use the same variable name. (by [@​fireairforce](https://redirect.github.com/fireairforce) in [#​21041](https://redirect.github.com/webpack/webpack/pull/21041))
- Resolve the global `new Worker(new URL(...))` to `worker_threads` on the `node` target. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21217](https://redirect.github.com/webpack/webpack/pull/21217))
- Use optional chaining in generated runtime code where the environment supports it. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21186](https://redirect.github.com/webpack/webpack/pull/21186))
- Allow output.path to be the filesystem root by treating EISDIR like EEXIST in mkdirp. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21223](https://redirect.github.com/webpack/webpack/pull/21223))
- Reduce memory by not retaining the source location object on every dependency. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21183](https://redirect.github.com/webpack/webpack/pull/21183))
- Keep the full exports object when a `require()` binding is re-exported. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21144](https://redirect.github.com/webpack/webpack/pull/21144))
- Replace glob-to-regexp dependency with watchpack's globToRegExp utility. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​21176](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/hai-x) in [#​21210](https://redirect.github.com/webpack/webpack/pull/21210))
- Type serializer read/write contexts with positional tuples and fix a ProvideSharedDependency version/request swap. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21201](https://redirect.github.com/webpack/webpack/pull/21201))
- Speed up buildChunkGraph by deriving block modules from the first runtime. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21166](https://redirect.github.com/webpack/webpack/pull/21166))
- Cache re-export target resolution in SideEffectsFlagPlugin for faster builds. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21085](https://redirect.github.com/webpack/webpack/pull/21085))
- Skip pure single-star passthrough modules for `export *` re-exports. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21085](https://redirect.github.com/webpack/webpack/pull/21085))
- Skip dependency error/warning reporting for unchanged modules on rebuilds. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21154](https://redirect.github.com/webpack/webpack/pull/21154))
- Use value descriptors instead of getters for const export bindings. (by [@​xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#​21021](https://redirect.github.com/webpack/webpack/pull/21021))
- Apply CSS hot updates on the Node side of a universal target. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21217](https://redirect.github.com/webpack/webpack/pull/21217))
- Guard CSS `style` export-type injection so it no-ops when there is no `document`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21193](https://redirect.github.com/webpack/webpack/pull/21193))
- Avoid building warning stats objects when counting warnings without a filter. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21198](https://redirect.github.com/webpack/webpack/pull/21198))
- Recognize forward-slash Windows absolute paths (e.g. C:/dir) consistently. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21223](https://redirect.github.com/webpack/webpack/pull/21223))
### [<[inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51072](https://github.com/inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51072))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.107.1...v5.107.2)
##### Patch Changes
- 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](https://redirect.github.com/alexander-akait) in [#​21020](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21023](https://redirect.github.com/webpack/webpack/pull/21023))
- Fix HTML `[contenthash]` for referenced asset and inline-style URL changes. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21018](https://redirect.github.com/webpack/webpack/pull/21018))
- Resolve chunk-hash placeholders in chunk URLs embedded into extracted HTML. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21018](https://redirect.github.com/webpack/webpack/pull/21018))
- Remove unnecessary `__webpack_require__` runtime helpers in ESM library output with multi-module chunks. (by [@​xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#​21032](https://redirect.github.com/webpack/webpack/pull/21032))
- Rewrite `NormalModule#getSideEffectsConnectionState` walk as an allocation-light iterative loop instead of a generator trampoline, restoring rebuild performance lost in [#​20993](https://redirect.github.com/webpack/webpack/issues/20993) while keeping deep import chains stack-safe. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21014](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21013](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21026](https://redirect.github.com/webpack/webpack/pull/21026))
- Release per-child `codeGenerationResults` in `MultiCompiler` and at `Compiler.close` to reduce memory retention. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​21015](https://redirect.github.com/webpack/webpack/pull/21015))
- Reduce peak memory of `SourceMapDevToolPlugin` on large builds (closes [#​20961](https://redirect.github.com/webpack/webpack/issues/20961)). (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20963](https://redirect.github.com/webpack/webpack/pull/20963))
- Fix slow `require.context()` / dynamic `import()` rebuilds in watch mode ([#​13636](https://redirect.github.com/webpack/webpack/issues/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](https://redirect.github.com/alexander-akait) in [#​21020](https://redirect.github.com/webpack/webpack/pull/21020))
### [<[inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51071](https://github.com/inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51071))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.107.0...v5.107.1)
##### Patch Changes
- 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](https://redirect.github.com/alexander-akait) in [#​21000](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21003](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20993](https://redirect.github.com/webpack/webpack/pull/20993))
- Fix `NormalModuleFactory` parser/generator types: (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20999](https://redirect.github.com/webpack/webpack/pull/20999))
- `module.generator.html` now uses `HtmlGeneratorOptions` instead of `EmptyGeneratorOptions` (the `extract` option was hidden from the `createGenerator` / `generator` hook types).
- WebAssembly (`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](https://redirect.github.com/alexander-akait) in [#​20990](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21002](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21001](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20987](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20992](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20994](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​21004](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20988](https://redirect.github.com/webpack/webpack/pull/20988))
### [<[inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md#51070](https://github.com/inline_block>0</inline_block>](https://redirect.github.com/webpack/webpack/blob/HEAD/CHANGELOG.md/issues/51070))
[Compare Source](https://redirect.github.com/webpack/webpack/compare/v5.106.2...v5.107.0)
##### Minor Changes
- 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](https://redirect.github.com/xiaoxiaojx) in [#​20894](https://redirect.github.com/webpack/webpack/pull/20894))
- Support module concatenation (scope hoisting) for CSS modules with `text`, `css-style-sheet`, `style`, and `link` export types (by [@​xiaoxiaojx](https://redirect.github.com/xiaoxiaojx) in [#​20851](https://redirect.github.com/webpack/webpack/pull/20851))
- The `generator.exportsConvention` function form for CSS modules now accepts `string[]` in addition to `string`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20914](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20947](https://redirect.github.com/webpack/webpack/pull/20947))
- Add `CssModulesPlugin.getCompilationHooks(compilation).orderModules` hook. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20978](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20946](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20925](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20964](https://redirect.github.com/webpack/webpack/pull/20964))
- Added an `experiments.html` flag that reserves the `html` module type for the first-class HTML entry-point support. (by [@​aryanraj45](https://redirect.github.com/aryanraj45) in [#​20902](https://redirect.github.com/webpack/webpack/pull/20902))
- Preserve `defer` / `source` import phase keywords on external dependencies in ESM output, the same way import attributes are preserved. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20934](https://redirect.github.com/webpack/webpack/pull/20934))
- Support the `#__NO_SIDE_EFFECTS__` annotation to mark functions as pure for better tree-shaking. (by [@​hai-x](https://redirect.github.com/hai-x) in [#​20775](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20979](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20933](https://redirect.github.com/webpack/webpack/pull/20933))
##### Patch Changes
- 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](https://redirect.github.com/alexander-akait) in [#​20929](https://redirect.github.com/webpack/webpack/pull/20929))
- Avoid emitting the `__webpack_require__` runtime in CSS bundles when all imported CSS modules were concatenated into the same scope. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20936](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20938](https://redirect.github.com/webpack/webpack/pull/20938))
- Embed an inline `sourceMappingURL` data URI inside the CSS when the `parser.exportType` option are `text`, `style`, or `css-style-sheet`. Also merge `@import`ed 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](https://redirect.github.com/alexander-akait) in [#​20886](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/alexander-akait) in [#​20929](https://redirect.github.com/webpack/webpack/pull/20929))
- Preserve `@charset` at-rule when CSS modules use `exportType: "text"`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20912](https://redirect.github.com/webpack/webpack/pull/20912))
- Resolve `[hash]`/`[fullhash]` placeholders in `output.publicPath` when generating `url()` references for `experiments.css`. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20879](https://redirect.github.com/webpack/webpack/pull/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](https://redirect.github.com/xiaoxiaojx) in [#​20911](https://redirect.github.com/webpack/webpack/pull/20911))
- Fix CSS Modules `@value` resolution when the same local name is imported from multiple modules. (by [@​alexander-akait](https://redirect.github.com/alexander-akait) in [#​20940](https://redirect.github.com/webpack/webpack/pull/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 p
> ✂ **Note**
>
> PR body was truncated to here.
</details>
---
### Configuration
📅 **Schedule**: (in timezone Europe/Paris)
- Branch creation
- "every weekend"
- Automerge
- At any time (no schedule defined)
🚦 **Automerge**: Enabled.
♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box
---
This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/e2e-test-quest/uuv).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMTAuMiIsInVwZGF0ZWRJblZlciI6IjQzLjI0Mi4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
</iframe>