Skip to content

chore(release): new release#21019

Merged
alexander-akait merged 1 commit into
mainfrom
changeset-release/main
May 25, 2026
Merged

chore(release): new release#21019
alexander-akait merged 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented May 22, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

webpack@5.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 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 fix: trampoline getSideEffectsConnectionState to avoid stack overflow on deep import chains #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 Source map production is unbelievably memory intensive #20961). (by @alexander-akait in #20963)

  • Fix slow require.context() / dynamic import() rebuilds in watch mode (perf problems with require.context #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)

@github-actions github-actions Bot force-pushed the changeset-release/main branch 11 times, most recently from 8452a77 to b312e57 Compare May 25, 2026 14:47
@github-actions github-actions Bot force-pushed the changeset-release/main branch from b312e57 to df419cb Compare May 25, 2026 15:13
@alexander-akait alexander-akait merged commit cfb24a4 into main May 25, 2026
5 checks passed
@alexander-akait alexander-akait deleted the changeset-release/main branch May 25, 2026 15:17
@github-actions

Copy link
Copy Markdown
Contributor Author

This PR is packaged and the instant preview is available (cfb24a4).

Install it locally:

  • npm
npm i -D webpack@https://pkg.pr.new/webpack@cfb24a4
  • yarn
yarn add -D webpack@https://pkg.pr.new/webpack@cfb24a4
  • pnpm
pnpm add -D webpack@https://pkg.pr.new/webpack@cfb24a4

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Source map production is unbelievably memory intensive

1 participant