Skip to content

refactor: move dll related code to dll directory - #20868

Merged
alexander-akait merged 4 commits into
mainfrom
refactor-structure-move-dll-related-code-to-dll-directory
Apr 24, 2026
Merged

alexander-akait merged 4 commits into
mainfrom
refactor-structure-move-dll-related-code-to-dll-directory

Conversation

@alexander-akait

Copy link
Copy Markdown
Member

Summary

refactor - improve inner structure, note dll plugins should be consumed from compiler.webpack.DllPlugin, not using require("webpack/lib/DllPlugin"), the last is not public API

What kind of change does this PR introduce?

refactor

Did you add tests for your changes?

Existing

Does this PR introduce a breaking change?

Described above, it is not a public API

If relevant, what needs to be documented once your changes are merged or what have you already documented?

No need

Use of AI

No

@changeset-bot

changeset-bot Bot commented Apr 24, 2026 •

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: a11b81b

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@alexander-akait
alexander-akait marked this pull request as ready for review April 24, 2026 14:14
Copilot AI review requested due to automatic review settings April 24, 2026 14:14
@github-actions

github-actions Bot commented Apr 24, 2026 •

Copy link
Copy Markdown
Contributor

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

Install it locally:

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

@codecov

codecov Bot commented Apr 24, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 67.34694% with 16 lines in your changes missing coverage. Please review.
✅ Project coverage is 82.34%. Comparing base (1d9d029) to head (a11b81b).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
lib/index.js 25.00% 12 Missing ⚠️
lib/util/internalSerializables.js 0.00% 2 Missing ⚠️
lib/dll/DllPlugin.js 66.66% 1 Missing ⚠️
lib/dll/DllReferencePlugin.js 85.71% 1 Missing ⚠️

❌ Your patch status has failed because the patch coverage (67.34%) is below the target coverage (90.00%). You can increase the patch coverage or adjust the target coverage.
❌ Your changes status has failed because you have indirect coverage changes. Learn more about Unexpected Coverage Changes and reasons for indirect coverage changes.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #20868      +/-   ##
==========================================
+ Coverage   80.69%   82.34%   +1.64%     
==========================================
  Files         528      529       +1     
  Lines       53747    53795      +48     
  Branches    14189    14193       +4     
==========================================
+ Hits        43372    44297     +925     
+ Misses      10375     9498     -877     
Flag Coverage Δ
integration 79.90% <67.34%> (+1.79%) ⬆️
test262 45.97% <0.00%> (-0.05%) ⬇️
unit 36.25% <0.00%> (-0.01%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Refactors webpack’s DLL-related implementation into a dedicated lib/dll/ area and exposes DLL plugins under a new webpack.dll namespace, aligning consumption with the public compiler.webpack.* surface.

Changes:

  • Added exports.dll namespace to TypeScript types and a corresponding dll scope on the main JS export object.
  • Updated DLL plugin/module implementations to use correct relative imports after moving into lib/dll/.
  • Updated internal serializer registration entries for moved DLL modules.

Reviewed changes

Copilot reviewed 12 out of 13 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
types.d.ts Adds exports.dll namespace and adjusts export placement for DLL plugins.
lib/util/internalSerializables.js Moves serializer loader entries for DLL modules to dll/* keys.
lib/index.js Adds dll scope and routes DLL plugin getters to ./dll/*.
lib/dll/LibManifestPlugin.js Fixes relative imports after moving under lib/dll/.
lib/dll/DllReferencePlugin.js Fixes relative imports and schema require paths after move.
lib/dll/DllPlugin.js Fixes relative imports and schema require paths after move.
lib/dll/DllModuleFactory.js Fixes relative imports/types after move.
lib/dll/DllModule.js Updates imports and changes serialization request id to webpack/lib/dll/DllModule.
lib/dll/DllEntryPlugin.js Fixes dependency imports/types after move.
lib/dll/DelegatedPlugin.js Fixes dependency import/types after move.
lib/dll/DelegatedModuleFactoryPlugin.js Fixes typedef import paths after move.
lib/dll/DelegatedModule.js Updates imports and changes serialization request id to webpack/lib/dll/DelegatedModule.
Comments suppressed due to low confidence (2)

lib/dll/DllModule.js:184

  • Changing the makeSerializable request from webpack/lib/DllModule to webpack/lib/dll/DllModule changes the serialization identifier for this class. That will make existing persistent caches (e.g. filesystem cache packs) from earlier builds fail to deserialize with No deserializer registered... errors, even if they would otherwise be invalidated by build dependency snapshots. Consider keeping the original request string for backward compatibility (and just update internalSerializables to require the new file location), or provide a compatibility layer that still registers/deserializes the old request id.
    lib/dll/DelegatedModule.js:290
  • Changing the makeSerializable request from webpack/lib/DelegatedModule to webpack/lib/dll/DelegatedModule changes the serialization identifier for this class and can break deserialization of existing persistent caches (filesystem cache packs) created with older builds. To avoid cache restore failures, consider keeping the original request string and updating internalSerializables to point to the new module location (or otherwise maintaining backward-compatible deserialization for the old request id).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread lib/util/internalSerializables.js
Comment thread lib/util/internalSerializables.js
@alexander-akait
alexander-akait force-pushed the refactor-structure-move-dll-related-code-to-dll-directory branch from b21b511 to b82500f Compare April 24, 2026 14:40
@codspeed

codspeed Bot commented Apr 24, 2026 •

Copy link
Copy Markdown

Merging this PR will degrade performance by 52.65%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 6 improved benchmarks
❌ 6 regressed benchmarks
✅ 132 untouched benchmarks

⚠️ Please fix the performance issues or acknowledge them on CodSpeed.

Performance Changes

Mode Benchmark BASE HEAD Efficiency
⚡ Memory benchmark "devtool-eval-source-map", scenario '{"name":"mode-development","mode":"development"}' 1.9 MB 1.1 MB +69.38%
⚡ Memory benchmark "many-modules-commonjs", scenario '{"name":"mode-development","mode":"development"}' 1,143.2 KB 849.7 KB +34.54%
❌ Memory benchmark "many-modules-esm", scenario '{"name":"mode-production","mode":"production"}' 6.8 MB 9.2 MB -25.83%
❌ Memory benchmark "side-effects-reexport", scenario '{"name":"mode-production","mode":"production"}' 4.4 MB 5.8 MB -23.6%
⚡ Memory benchmark "many-chunks-esm", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 892.9 KB 142.1 KB ×6.3
❌ Memory benchmark "future-defaults", scenario '{"name":"mode-development","mode":"development"}' 1.4 MB 2.1 MB -35.53%
❌ Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 461.2 KB 974.2 KB -52.65%
⚡ Memory benchmark "devtool-eval-source-map", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 857.5 KB 282.3 KB ×3
⚡ Memory benchmark "future-defaults", scenario '{"name":"mode-production","mode":"production"}' 10.2 MB 7.2 MB +42.38%
❌ Memory benchmark "three-long", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 943.2 KB 1,240.5 KB -23.97%
⚡ Memory benchmark "many-chunks-commonjs", scenario '{"name":"mode-development","mode":"development"}' 1,303 KB 793.2 KB +64.28%
❌ Memory benchmark "side-effects-reexport", scenario '{"name":"mode-development-rebuild","mode":"development","watch":true}' 847.2 KB 1,369.6 KB -38.14%

Comparing refactor-structure-move-dll-related-code-to-dll-directory (a11b81b) with main (1d9d029)

Open in CodSpeed

@github-actions

Copy link
Copy Markdown
Contributor

Types Coverage

Coverage after merging refactor-structure-move-dll-related-code-to-dll-directory into main will be
98.93%
Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
bin
   webpack.js98.77%100%100%98.77%91
examples
   build-common.js100%100%100%100%
   buildAll.js100%100%100%100%
   examples.js100%100%100%100%
   template-common.js98.21%100%100%98.21%72
examples/custom-javascript-parser
   test.filter.js100%100%100%100%
examples/custom-javascript-parser/internals
   acorn-parse.js100%100%100%100%
   meriyah-parse.js100%100%100%100%
   oxc-parse.js91.30%100%100%91.30%140, 142–143, 145, 147, 153–154, 161, 168, 90
examples/markdown
   webpack.config.mjs100%100%100%100%
examples/typescript
   test.filter.js50%100%100%50%5
examples/virtual-modules
   test.filter.js100%100%100%100%
examples/wasm-bindgen-esm
   test.filter.js100%100%100%100%
examples/wasm-complex
   test.filter.js100%100%100%100%
examples/wasm-simple
   test.filter.js100%100%100%100%
examples/wasm-simple-source-phase
   test.filter.js100%100%100%100%
lib
   APIPlugin.js100%100%100%100%
   AsyncDependenciesBlock.js100%100%100%100%
   AutomaticPrefetchPlugin.js100%100%100%100%
   BannerPlugin.js100%100%100%100%
   Cache.js98.21%100%100%98.21%104
   CacheFacade.js100%100%100%100%
   Chunk.js99.72%100%100%99.72%37
   ChunkGraph.js100%100%100%100%
   ChunkGroup.js100%100%100%100%
   ChunkTemplate.js100%100%100%100%
   CleanPlugin.js98.72%100%100%98.72%206, 226, 382
   CodeGenerationResults.js100%100%100%100%
   CompatibilityPlugin.js100%100%100%100%
   Compilation.js98.55%100%100%98.55%1559, 1855, 1862, 1870, 1892, 2788, 3213, 3868, 3897, 3950–3951, 3955, 3960, 3976–3977, 3991–3992, 3997–3998, 4471, 4497, 498, 503, 5205, 5286, 5301, 5326–5327, 5329, 5651, 5656, 5662, 5665, 5677, 5679, 5683, 5699, 5714, 5746, 5800, 5824, 5938, 717–718
   Compiler.js99.55%100%100%99.55%1116–1117, 1125
   ConcatenationScope.js98.59%100%100%98.59%189
   ConditionalInitFragment.js100%100%100%100%
   ConstPlugin.js100%100%100%100%
   ContextExclusionPlugin.js100%100%100%100%
   ContextModule.js100%100%100%100%
   ContextModuleFactory.js97.75%100%100%97.75%258, 393, 418, 443, 447, 458
   ContextReplacementPlugin.js100%100%100%100%
   CssModule.js81.32%100%100%81.32%157, 162–177
   DefinePlugin.js98.92%100%100%98.92%158–159, 175, 194, 268
   DependenciesBlock.js100%100%100%100%
   Dependency.js98.13%100%100%98.13%371, 404
   DependencyTemplate.js100%100%100%100%
   DependencyTemplates.js100%100%100%100%
   DotenvPlugin.js97.88%100%100%97.88%237, 378, 391–392
   DynamicEntryPlugin.js100%100%100%100%
   EntryOptionPlugin.js100%100%100%100%
   EntryPlugin.js100%100%100%100%
   Entrypoint.js100%100%100%100%
   EnvironmentPlugin.js97.14%100%100%97.14%49
   ErrorHelpers.js100%100%100%100%
   EvalDevToolModulePlugin.js100%100%100%100%
   EvalSourceMapDevToolPlugin.js100%100%100%100%
   ExportsInfo.js100%100%100%100%
   ExportsInfoApiPlugin.js100%100%100%100%
   ExternalModule.js98.89%100%100%98.89%399–403, 542
   ExternalModuleFactoryPlugin.js100%100%100%100%
   ExternalsPlugin.js100%100%100%100%
   FileSystemInfo.js99.49%100%100%99.49%182, 2213–2214, 2217, 2228, 2239, 2250, 278, 3596, 3611, 3635
   FlagAllModulesAsUsedPlugin.js100%100%100%100%
   FlagDependencyExportsPlugin.js98.74%100%100%98.74%399, 401, 405
   FlagDependencyUsagePlugin.js100%100%100%100%
   FlagEntryExportAsUsedPlugin.js100%100%100%100%
   Generator.js100%100%100%100%
   GraphHelpers.js100%100%100%100%
   HotModuleReplacementPlugin.js100%100%100%100%
   HotUpdateChunk.js100%100%100%100%
   IgnorePlugin.js100%100%100%100%
   IgnoreWarningsPlugin.js100%100%100%100%
   InitFragment.js100%100%100%100%
   JavascriptMetaInfoPlugin.js100%100%100%100%
   LibraryTemplatePlugin.js100%100%100%100%
   LoaderOptionsPlugin.js100%100%100%100%
   LoaderTargetPlugin.js100%100%100%100%
   MainTemplate.js100%100%100%100%
   ManifestPlugin.js100%100%100%100%
   Module.js98.50%100%100%98.50%1304, 1309, 1370, 1384, 1446, 1455
   ModuleFactory.js100%100%100%100%
   ModuleFilenameHelpers.js98.85%100%100%98.85%106, 108
   ModuleGraph.js99.73%100%100%99.73%1004
   ModuleGraphConnection.js100%100%100%100%
   ModuleInfoHeaderPlugin.js100%100%100%100%
   ModuleProfile.js100%100%100%100%
   ModuleSourceTypeConstants.js100%100%100%100%
   ModuleTemplate.js100%100%100%100%
   ModuleTypeConstants.js100%100%100%100%
   MultiCompiler.js99.69%100%100%99.69%645
   MultiStats.js100%100%100%100%
   MultiWatching.js100%100%100%100%
   NoEmitOnErrorsPlugin.js100%100%100%100%
   NodeStuffPlugin.js100%100%100%100%
   NormalModule.js97.68%100%100%97.68%1004, 1038, 1054, 1141, 1792, 1797–1807, 214, 726, 729, 746, 763
   NormalModuleFactory.js99.47%100%100%99.47%1067, 1376, 466, 478
   NormalModuleReplacementPlugin.js100%100%100%100%
   NullFactory.js100%100%100%100%
   OptimizationStages.js100%100%100%100%
   OptionsApply.js100%100%100%100%
   Parser.js100%100%100%100%
   PlatformPlugin.js100%100%100%100%
   PrefetchPlugin.js100%100%100%100%
   ProgressPlugin.js98.75%100%100%98.75%446–447, 452, 454, 518
   ProvidePlugin.js100%100%100%100%
   RawModule.js100%100%100%100%
   RecordIdsPlugin.js100%100%100%100%
   RequestShortener.js100%100%100%100%
   RequireJsStuffPlugin.js100%100%100%100%
   ResolverFactory.js100%100%100%100%
   RuntimeGlobals.js100%100%100%100%
   RuntimeModule.js100%100%100%100%
   RuntimePlugin.js100%100%100%100%
   RuntimeTemplate.js100%100%100%100%
   SelfModuleFactory.js100%100%100%100%
   SingleEntryPlugin.js100%100%100%100%
   SizeFormatHelpers.js100%100%100%100%
   SourceMapDevToolModuleOptionsPlugin.js100%100%100%100%
   SourceMapDevToolPlugin.js99.16%100%100%99.16%267–268, 610
   Stats.js100%100%100%100%
   Template.js100%100%100%100%
   TemplatedPathPlugin.js98.86%100%100%98.86%134–135
   UseStrictPlugin.js100%100%100%100%
   WarnCaseSensitiveModulesPlugin.js100%100%100%100%
   WarnDeprecatedOptionPlugin.js100%100%100%100%
   WarnNoModeSetPlugin.js100%100%100%100%
   WatchIgnorePlugin.js100%100%100%100%
   Watching.js100%100%100%100%
   WebpackError.js100%100%100%100%
   WebpackIsIncludedPlugin.js100%100%100%100%
   WebpackOptionsApply.js100%100%100%100%
   WebpackOptionsDefaulter.js100%100%100%100%
   buildChunkGraph.js99.87%100%100%99.87%326
   cli.js98.71%100%100%98.71%117, 469, 501, 543, 813
   formatLocation.js100%100%100%100%
   index.js100%100%100%100%
   validateSchema.js94.67%100%100%94.67%100, 87, 89, 98
   webpack.js97.22%100%100%97.22%196, 218, 220
lib/asset
   AssetBytesGenerator.js100%100%100%100%
   AssetBytesParser.js100%100%100%100%
   AssetGenerator.js100%100%100%100%
   AssetModulesPlugin.js97.77%100%100%97.77%285, 309, 312, 364, 40
   AssetParser.js100%100%100%100%
   AssetSourceGenerator.js100%100%100%100%
   AssetSourceParser.js100%100%100%100%
   RawDataUrlModule.js100%100%100%100%
lib/async-modules
   AsyncModuleHelpers.js100%100%100%100%
   AwaitDependenciesInitFragment.js100%100%100%100%
   InferAsyncModulesPlugin.js100%100%100%100%
lib/cache
   AddBuildDependenciesPlugin.js100%100%100%100%
   AddManagedPathsPlugin.js100%100%100%100%
   IdleFileCachePlugin.js97.92%100%100%97.92%71, 83, 91
   MemoryCachePlugin.js95.83%100%100%95.83%33
   MemoryWithGcCachePlugin.js93.15%100%100%93.15%106, 113–114, 122, 89
   PackFileCacheStrategy.js96.40%100%100%96.40%1250, 1350, 1354, 1416, 628, 647, 657–659, 661, 677–678, 683, 686, 688, 693, 698, 722, 728, 762, 768, 774, 779, 790, 799, 804–805, 807, 824, 830–831, 833
   ResolverCachePlugin.js100%100%100%100%
   getLazyHashedEtag.js100%100%100%100%
   mergeEtags.js100%100%100%100%
lib/config
   browserslistTargetHandler.js100%100%100%100%
   defaults.js99.13%100%100%99.13%1291–1293, 1301, 270, 273, 278, 282, 467
   normalization.js99%100%100%99%191–192, 258, 273
   target.js100%100%100%100%
lib/container
   ContainerEntryDependency.js100%100%100%100%
   ContainerEntryModule.js100%100%100%100%
   ContainerEntryModuleFactory.js100%100%100%100%
   ContainerExposedDependency.js100%100%100%100%
   ContainerPlugin.js100%100%100%100%
   ContainerReferencePlugin.js100%100%100%100%
   FallbackDependency.js100%100%100%100%
   FallbackItemDependency.js100%100%100%100%
   

@alexander-akait
alexander-akait merged commit 235a160 into main Apr 24, 2026
59 of 61 checks passed
@alexander-akait
alexander-akait deleted the refactor-structure-move-dll-related-code-to-dll-directory branch April 24, 2026 17:50
bjohansebas pushed a commit to bjohansebas/webpack that referenced this pull request Jul 10, 2026
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.

2 participants