@depup/webpack 5.109.2-depup.0 → 5.110.3-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/changes.json +7 -7
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +46 -35
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +4 -7
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +7 -7
- package/lib/Compilation.js +688 -409
- package/lib/Compiler.js +53 -38
- package/lib/ConcatenationScope.js +107 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +121 -37
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +91 -26
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +111 -14
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +232 -77
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +44 -70
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +40 -49
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +8 -4
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +9 -4
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +152 -103
- package/lib/NormalModuleFactory.js +555 -110
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +335 -169
- package/lib/RuntimeTemplate.js +2761 -316
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +32 -22
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +12 -6
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +30 -23
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +270 -78
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +46 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +6 -11
- package/lib/container/ModuleFederationPlugin.js +7 -24
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +171 -43
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +84 -32
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +172 -100
- package/lib/css/CssParser.js +1113 -568
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5334 -0
- package/lib/css/syntax.js +9647 -232
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +170 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +121 -60
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +49 -31
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +45 -5
- package/lib/dependencies/ImportDependency.js +33 -50
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +73 -49
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +50 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
- package/lib/dependencies/WorkerDependency.js +22 -22
- package/lib/dependencies/WorkletDependency.js +18 -21
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/importOptionsCheck.js +47 -0
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DotenvFileError.js +29 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/ImportedBindingAssignmentError.js +30 -0
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +9 -6
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +277 -77
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +366 -200
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +6034 -1384
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +7 -8
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +103 -123
- package/lib/javascript/JavascriptParser.js +242 -99
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +2678 -232
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +47 -6
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +1030 -476
- package/lib/optimize/ConstExportsPlugin.js +16 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +130 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
- package/lib/optimize/RealContentHashPlugin.js +121 -41
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +86 -24
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +295 -79
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +46 -20
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +4 -4
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +22 -9
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
- package/lib/stats/StatsFactory.js +25 -26
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +20 -24
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/ArrayQueue.js +3 -3
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1066 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +3 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +10 -2
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/createMappings.js +25 -3
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +4 -0
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +8 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/removeBOM.js +82 -1
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
- package/lib/web/FetchCompileWasmPlugin.js +48 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +32 -25
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +667 -34
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +3223 -465
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const DuplicateModulesWarning = require("../errors/DuplicateModulesWarning");
|
|
9
|
+
const { compareStrings } = require("../util/comparators");
|
|
10
|
+
const getModuleSize = require("./getModuleSize");
|
|
11
|
+
|
|
12
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
13
|
+
/** @import Compiler from "../Compiler" */
|
|
14
|
+
/**
|
|
15
|
+
* @import {
|
|
16
|
+
* DuplicateModuleDetails
|
|
17
|
+
* } from "../errors/DuplicateModulesWarning"
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const PLUGIN_NAME = "DuplicateModulesPlugin";
|
|
21
|
+
|
|
22
|
+
// Enough to name the offenders without printing the module graph.
|
|
23
|
+
const MAX_REPORTED_MODULES = 5;
|
|
24
|
+
|
|
25
|
+
class DuplicateModulesPlugin {
|
|
26
|
+
/**
|
|
27
|
+
* Creates an instance of DuplicateModulesPlugin.
|
|
28
|
+
* @param {PerformanceOptions} options the plugin options
|
|
29
|
+
*/
|
|
30
|
+
constructor(options) {
|
|
31
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
32
|
+
this.hints = options.hints;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
37
|
+
* @param {Compiler} compiler the compiler instance
|
|
38
|
+
* @returns {void}
|
|
39
|
+
*/
|
|
40
|
+
apply(compiler) {
|
|
41
|
+
const hints = this.hints;
|
|
42
|
+
|
|
43
|
+
if (!hints) return;
|
|
44
|
+
|
|
45
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
46
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
47
|
+
const { chunkGraph, requestShortener } = compilation;
|
|
48
|
+
/** @type {DuplicateModuleDetails[]} */
|
|
49
|
+
const duplicated = [];
|
|
50
|
+
let wasted = 0;
|
|
51
|
+
|
|
52
|
+
for (const module of compilation.modules) {
|
|
53
|
+
const chunks = chunkGraph.getNumberOfModuleChunks(module);
|
|
54
|
+
|
|
55
|
+
if (chunks < 2) continue;
|
|
56
|
+
|
|
57
|
+
// The first copy is the one that had to be emitted; the rest are
|
|
58
|
+
// what a shared chunk would save.
|
|
59
|
+
const extra = getModuleSize(module) * (chunks - 1);
|
|
60
|
+
|
|
61
|
+
wasted += extra;
|
|
62
|
+
duplicated.push({
|
|
63
|
+
name: module.readableIdentifier(requestShortener),
|
|
64
|
+
chunks,
|
|
65
|
+
wasted: extra
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (duplicated.length === 0) return;
|
|
70
|
+
|
|
71
|
+
// Ties break by name: which modules finish first is not stable.
|
|
72
|
+
duplicated.sort(
|
|
73
|
+
(a, b) => b.wasted - a.wasted || compareStrings(a.name, b.name)
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const warning = new DuplicateModulesWarning(
|
|
77
|
+
duplicated.slice(0, MAX_REPORTED_MODULES),
|
|
78
|
+
wasted
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
if (hints === "error") {
|
|
82
|
+
compilation.errors.push(warning);
|
|
83
|
+
} else if (hints === "stats") {
|
|
84
|
+
compilation.hints.push(warning);
|
|
85
|
+
} else {
|
|
86
|
+
compilation.warnings.push(warning);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
module.exports = DuplicateModulesPlugin;
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const DuplicatePackagesWarning = require("./DuplicatePackagesWarning");
|
|
9
|
+
|
|
10
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
11
|
+
/** @import Compiler from "../Compiler" */
|
|
12
|
+
/** @import Module from "../Module" */
|
|
13
|
+
/** @import NormalModule from "../NormalModule" */
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* One copy of a package, identified by the directory its description file
|
|
17
|
+
* (usually `package.json`) lives in.
|
|
18
|
+
* @typedef {object} PackageCopy
|
|
19
|
+
* @property {string} version version of this copy
|
|
20
|
+
* @property {string} path directory of this copy
|
|
21
|
+
* @property {Module[]} modules modules included from this copy
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
const PLUGIN_NAME = "DuplicatePackagesPlugin";
|
|
25
|
+
|
|
26
|
+
class DuplicatePackagesPlugin {
|
|
27
|
+
/**
|
|
28
|
+
* Creates an instance of DuplicatePackagesPlugin.
|
|
29
|
+
* @param {PerformanceOptions} options the plugin options
|
|
30
|
+
*/
|
|
31
|
+
constructor(options) {
|
|
32
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
33
|
+
this.hints = options.hints;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
38
|
+
* @param {Compiler} compiler the compiler instance
|
|
39
|
+
* @returns {void}
|
|
40
|
+
*/
|
|
41
|
+
apply(compiler) {
|
|
42
|
+
const hints = this.hints;
|
|
43
|
+
|
|
44
|
+
if (!hints) return;
|
|
45
|
+
|
|
46
|
+
// `thisCompilation` keeps the hint to the root build, as child
|
|
47
|
+
// compilations report the copies of their parent a second time
|
|
48
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
49
|
+
/** @type {DuplicatePackagesWarning[]} */
|
|
50
|
+
const warnings = [];
|
|
51
|
+
|
|
52
|
+
compilation.hooks.seal.tap(PLUGIN_NAME, () => {
|
|
53
|
+
/** @type {Map<string, Map<string, PackageCopy>>} */
|
|
54
|
+
const packages = new Map();
|
|
55
|
+
for (const module of compilation.modules) {
|
|
56
|
+
const resolveData =
|
|
57
|
+
/** @type {NormalModule} */
|
|
58
|
+
(module).resourceResolveData;
|
|
59
|
+
if (resolveData === undefined) continue;
|
|
60
|
+
const { descriptionFileData, descriptionFileRoot } = resolveData;
|
|
61
|
+
if (descriptionFileData === undefined) continue;
|
|
62
|
+
const { name, version } = descriptionFileData;
|
|
63
|
+
// Only a named and versioned package can be compared with another copy
|
|
64
|
+
if (
|
|
65
|
+
typeof name !== "string" ||
|
|
66
|
+
typeof version !== "string" ||
|
|
67
|
+
descriptionFileRoot === undefined
|
|
68
|
+
) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
let copies = packages.get(name);
|
|
72
|
+
if (copies === undefined) {
|
|
73
|
+
copies = new Map();
|
|
74
|
+
packages.set(name, copies);
|
|
75
|
+
}
|
|
76
|
+
const copy = copies.get(descriptionFileRoot);
|
|
77
|
+
if (copy === undefined) {
|
|
78
|
+
copies.set(descriptionFileRoot, {
|
|
79
|
+
version,
|
|
80
|
+
path: descriptionFileRoot,
|
|
81
|
+
modules: [module]
|
|
82
|
+
});
|
|
83
|
+
} else {
|
|
84
|
+
copy.modules.push(module);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const name of [...packages.keys()].sort()) {
|
|
88
|
+
const copies = /** @type {Map<string, PackageCopy>} */ (
|
|
89
|
+
packages.get(name)
|
|
90
|
+
);
|
|
91
|
+
if (copies.size < 2) continue;
|
|
92
|
+
const warning = new DuplicatePackagesWarning(
|
|
93
|
+
name,
|
|
94
|
+
[...copies.values()].sort((a, b) => (a.path < b.path ? -1 : 1)),
|
|
95
|
+
compilation.moduleGraph,
|
|
96
|
+
compilation.requestShortener
|
|
97
|
+
);
|
|
98
|
+
warnings.push(warning);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
// Reported past the hash: `createHash` folds every message into it, so
|
|
103
|
+
// a hint pushed earlier would change the build's identity.
|
|
104
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
105
|
+
for (const warning of warnings) {
|
|
106
|
+
if (hints === "error") {
|
|
107
|
+
compilation.errors.push(warning);
|
|
108
|
+
} else if (hints === "stats") {
|
|
109
|
+
compilation.hints.push(warning);
|
|
110
|
+
} else {
|
|
111
|
+
compilation.warnings.push(warning);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
module.exports = DuplicatePackagesPlugin;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("../errors/WebpackError");
|
|
9
|
+
|
|
10
|
+
/** @import Module from "../Module" */
|
|
11
|
+
/** @import ModuleGraph from "../ModuleGraph" */
|
|
12
|
+
/** @import NormalModule from "../NormalModule" */
|
|
13
|
+
/** @import RequestShortener from "../RequestShortener" */
|
|
14
|
+
/** @import { PackageCopy } from "./DuplicatePackagesPlugin" */
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @param {Module} module the module
|
|
18
|
+
* @returns {string | undefined} directory of the package the module belongs to
|
|
19
|
+
*/
|
|
20
|
+
const getPackagePath = (module) => {
|
|
21
|
+
const resolveData =
|
|
22
|
+
/** @type {NormalModule} */
|
|
23
|
+
(module).resourceResolveData;
|
|
24
|
+
return resolveData && resolveData.descriptionFileRoot;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Finds a module outside of the copy that pulled it into the build, so the
|
|
29
|
+
* warning can name the dependency responsible for this copy.
|
|
30
|
+
* @param {PackageCopy} copy the copy
|
|
31
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
32
|
+
* @returns {Module | undefined} a module importing this copy, when there is one
|
|
33
|
+
*/
|
|
34
|
+
const findImporter = (copy, moduleGraph) => {
|
|
35
|
+
for (const module of copy.modules) {
|
|
36
|
+
for (const origin of moduleGraph
|
|
37
|
+
.getIncomingConnectionsByOriginModule(module)
|
|
38
|
+
.keys()) {
|
|
39
|
+
if (origin && getPackagePath(origin) !== copy.path) return origin;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Warning emitted when one package is included more than once in a build,
|
|
46
|
+
* either in different versions or as several copies of the same version.
|
|
47
|
+
*/
|
|
48
|
+
class DuplicatePackagesWarning extends WebpackError {
|
|
49
|
+
/**
|
|
50
|
+
* @param {string} name name of the package
|
|
51
|
+
* @param {PackageCopy[]} copies copies of the package, sorted by path
|
|
52
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
53
|
+
* @param {RequestShortener} requestShortener the request shortener
|
|
54
|
+
*/
|
|
55
|
+
constructor(name, copies, moduleGraph, requestShortener) {
|
|
56
|
+
const versions = new Set(copies.map((copy) => copy.version));
|
|
57
|
+
const headline =
|
|
58
|
+
versions.size > 1
|
|
59
|
+
? `Multiple versions of the package "${name}" (${[...versions].join(", ")}) are included in this build:`
|
|
60
|
+
: `The package "${name}" (${copies[0].version}) is included ${copies.length} times in this build:`;
|
|
61
|
+
const copiesList = copies
|
|
62
|
+
.map((copy) => {
|
|
63
|
+
const importer = findImporter(copy, moduleGraph);
|
|
64
|
+
let message = `* ${copy.version} from ${requestShortener.shorten(copy.path)}, ${copy.modules.length} module(s)`;
|
|
65
|
+
if (importer !== undefined) {
|
|
66
|
+
message += `\n Included by ${importer.readableIdentifier(requestShortener)}`;
|
|
67
|
+
}
|
|
68
|
+
return message;
|
|
69
|
+
})
|
|
70
|
+
.join("\n");
|
|
71
|
+
super(`webpack performance recommendations:
|
|
72
|
+
${headline}
|
|
73
|
+
${copiesList}
|
|
74
|
+
Every copy is bundled separately and has its own module state, which increases the output size and can break \`instanceof\` checks and configuration shared through the package.
|
|
75
|
+
Align the version ranges requiring this package, or force a single version with "resolutions"/"overrides" in your package.json.`);
|
|
76
|
+
|
|
77
|
+
/** @type {string} */
|
|
78
|
+
this.name = "DuplicatePackagesWarning";
|
|
79
|
+
/** @type {Module} */
|
|
80
|
+
this.module = copies[0].modules[0];
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports = DuplicatePackagesWarning;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const DynamicExportsWarning = require("../errors/DynamicExportsWarning");
|
|
9
|
+
const { compareStrings } = require("../util/comparators");
|
|
10
|
+
const getModuleSize = require("./getModuleSize");
|
|
11
|
+
|
|
12
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
13
|
+
/** @import Compiler from "../Compiler" */
|
|
14
|
+
/** @import Module from "../Module" */
|
|
15
|
+
/** @import ModuleGraph from "../ModuleGraph" */
|
|
16
|
+
/** @import { DynamicExportsDetails } from "../errors/DynamicExportsWarning" */
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Tells whether another module imports this one.
|
|
20
|
+
* @param {Module} module the module to look up
|
|
21
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
|
22
|
+
* @returns {boolean} true when at least one module imports it
|
|
23
|
+
*/
|
|
24
|
+
const hasImporter = (module, moduleGraph) => {
|
|
25
|
+
for (const connection of moduleGraph.getIncomingConnections(module)) {
|
|
26
|
+
if (connection.originModule) return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return false;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const PLUGIN_NAME = "DynamicExportsPlugin";
|
|
33
|
+
|
|
34
|
+
// Enough to name the offenders without listing every CommonJS dependency.
|
|
35
|
+
const MAX_REPORTED_MODULES = 5;
|
|
36
|
+
|
|
37
|
+
class DynamicExportsPlugin {
|
|
38
|
+
/**
|
|
39
|
+
* Creates an instance of DynamicExportsPlugin.
|
|
40
|
+
* @param {PerformanceOptions} options the plugin options
|
|
41
|
+
*/
|
|
42
|
+
constructor(options) {
|
|
43
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
44
|
+
this.hints = options.hints;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
49
|
+
* @param {Compiler} compiler the compiler instance
|
|
50
|
+
* @returns {void}
|
|
51
|
+
*/
|
|
52
|
+
apply(compiler) {
|
|
53
|
+
const hints = this.hints;
|
|
54
|
+
|
|
55
|
+
if (!hints) return;
|
|
56
|
+
|
|
57
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
58
|
+
/** @type {DynamicExportsWarning | undefined} */
|
|
59
|
+
let warning;
|
|
60
|
+
|
|
61
|
+
// Exports are settled here, and concatenation has not merged the
|
|
62
|
+
// modules away yet, so each one can still be named and measured.
|
|
63
|
+
compilation.hooks.optimizeModules.tap(PLUGIN_NAME, (modules) => {
|
|
64
|
+
const { chunkGraph, moduleGraph, requestShortener } = compilation;
|
|
65
|
+
/** @type {DynamicExportsDetails[]} */
|
|
66
|
+
const unknown = [];
|
|
67
|
+
|
|
68
|
+
for (const module of modules) {
|
|
69
|
+
// One webpack already left out costs nothing.
|
|
70
|
+
if (chunkGraph.getNumberOfModuleChunks(module) === 0) continue;
|
|
71
|
+
|
|
72
|
+
// `null` is the third state: not "no other exports" but "there
|
|
73
|
+
// may be more, and they cannot be read from the source".
|
|
74
|
+
if (
|
|
75
|
+
moduleGraph.getExportsInfo(module).otherExportsInfo.provided !==
|
|
76
|
+
null
|
|
77
|
+
) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// The cost lands on whoever imports it, so an entry pays nothing.
|
|
82
|
+
if (!hasImporter(module, moduleGraph)) continue;
|
|
83
|
+
|
|
84
|
+
unknown.push({
|
|
85
|
+
name: module.readableIdentifier(requestShortener),
|
|
86
|
+
size: getModuleSize(module)
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
if (unknown.length === 0) return;
|
|
91
|
+
|
|
92
|
+
// Ties break by name: module order is not stable across runtimes.
|
|
93
|
+
unknown.sort(
|
|
94
|
+
(a, b) => b.size - a.size || compareStrings(a.name, b.name)
|
|
95
|
+
);
|
|
96
|
+
|
|
97
|
+
warning = new DynamicExportsWarning(
|
|
98
|
+
unknown.slice(0, MAX_REPORTED_MODULES),
|
|
99
|
+
unknown.length
|
|
100
|
+
);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Reported past the hash: `createHash` folds every message into it, so
|
|
104
|
+
// a hint pushed earlier would change the build's identity.
|
|
105
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
106
|
+
if (warning === undefined) return;
|
|
107
|
+
|
|
108
|
+
if (hints === "error") {
|
|
109
|
+
compilation.errors.push(warning);
|
|
110
|
+
} else if (hints === "stats") {
|
|
111
|
+
compilation.hints.push(warning);
|
|
112
|
+
} else {
|
|
113
|
+
compilation.warnings.push(warning);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
module.exports = DynamicExportsPlugin;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const EmbeddedSourceMapsWarning = require("../errors/EmbeddedSourceMapsWarning");
|
|
9
|
+
|
|
10
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
11
|
+
/** @import Compiler from "../Compiler" */
|
|
12
|
+
|
|
13
|
+
const PLUGIN_NAME = "EmbeddedSourceMapsPlugin";
|
|
14
|
+
|
|
15
|
+
// The two families that put the map inside the bundle rather than beside it:
|
|
16
|
+
// `eval` carries one per module, `inline` appends the whole map as a data url.
|
|
17
|
+
const EMBEDS_MAP_REGEXP = /^eval|inline/;
|
|
18
|
+
|
|
19
|
+
class EmbeddedSourceMapsPlugin {
|
|
20
|
+
/**
|
|
21
|
+
* Creates an instance of EmbeddedSourceMapsPlugin.
|
|
22
|
+
* @param {PerformanceOptions} options the plugin options
|
|
23
|
+
*/
|
|
24
|
+
constructor(options) {
|
|
25
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
26
|
+
this.hints = options.hints;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
31
|
+
* @param {Compiler} compiler the compiler instance
|
|
32
|
+
* @returns {void}
|
|
33
|
+
*/
|
|
34
|
+
apply(compiler) {
|
|
35
|
+
const hints = this.hints;
|
|
36
|
+
|
|
37
|
+
if (!hints) return;
|
|
38
|
+
|
|
39
|
+
const { devtool, mode } = compiler.options;
|
|
40
|
+
|
|
41
|
+
// Only production: embedding is what these devtools are for everywhere
|
|
42
|
+
// else, and the cost is only paid by the people loading the site.
|
|
43
|
+
if (mode !== "production" || !devtool) return;
|
|
44
|
+
|
|
45
|
+
// One devtool, or one per source type — either way it is the setting
|
|
46
|
+
// that embeds which the report has to name.
|
|
47
|
+
const embedding = (
|
|
48
|
+
typeof devtool === "string" ? [devtool] : devtool.map((it) => it.use)
|
|
49
|
+
).find((it) => typeof it === "string" && EMBEDS_MAP_REGEXP.test(it));
|
|
50
|
+
|
|
51
|
+
if (!embedding) return;
|
|
52
|
+
|
|
53
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
54
|
+
// `afterSeal` is past the hash, which folds every message into it — a
|
|
55
|
+
// hint reported earlier would change the build's identity.
|
|
56
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
57
|
+
const warning = new EmbeddedSourceMapsWarning(embedding);
|
|
58
|
+
|
|
59
|
+
if (hints === "error") {
|
|
60
|
+
compilation.errors.push(warning);
|
|
61
|
+
} else if (hints === "stats") {
|
|
62
|
+
compilation.hints.push(warning);
|
|
63
|
+
} else {
|
|
64
|
+
compilation.warnings.push(warning);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
module.exports = EmbeddedSourceMapsPlugin;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const EntrypointOverlapWarning = require("../errors/EntrypointOverlapWarning");
|
|
9
|
+
const { compareStrings } = require("../util/comparators");
|
|
10
|
+
const getModuleSize = require("./getModuleSize");
|
|
11
|
+
const getSourceModules = require("./getSourceModules");
|
|
12
|
+
|
|
13
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
14
|
+
/** @import Chunk from "../Chunk" */
|
|
15
|
+
/** @import Compiler from "../Compiler" */
|
|
16
|
+
/** @import Module from "../Module" */
|
|
17
|
+
/**
|
|
18
|
+
* @import {
|
|
19
|
+
* EntrypointOverlapDetails
|
|
20
|
+
* } from "../errors/EntrypointOverlapWarning"
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
const PLUGIN_NAME = "EntrypointOverlapPlugin";
|
|
24
|
+
|
|
25
|
+
// Enough to name the offenders without printing the module graph.
|
|
26
|
+
const MAX_REPORTED_MODULES = 5;
|
|
27
|
+
|
|
28
|
+
class EntrypointOverlapPlugin {
|
|
29
|
+
/**
|
|
30
|
+
* Creates an instance of EntrypointOverlapPlugin.
|
|
31
|
+
* @param {PerformanceOptions} options the plugin options
|
|
32
|
+
*/
|
|
33
|
+
constructor(options) {
|
|
34
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
35
|
+
this.hints = options.hints;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
40
|
+
* @param {Compiler} compiler the compiler instance
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*/
|
|
43
|
+
apply(compiler) {
|
|
44
|
+
const hints = this.hints;
|
|
45
|
+
|
|
46
|
+
if (!hints) return;
|
|
47
|
+
|
|
48
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
49
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
50
|
+
const { chunkGraph, entrypoints, requestShortener } = compilation;
|
|
51
|
+
|
|
52
|
+
if (entrypoints.size < 2) return;
|
|
53
|
+
|
|
54
|
+
/** @type {Map<Module, { chunks: Set<Chunk>, entrypoints: Set<string> }>} */
|
|
55
|
+
const reach = new Map();
|
|
56
|
+
|
|
57
|
+
for (const [name, entrypoint] of entrypoints) {
|
|
58
|
+
for (const chunk of entrypoint.chunks) {
|
|
59
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
60
|
+
// Through scope hoisting: two entrypoints concatenating the same
|
|
61
|
+
// file produce two modules, so the chunk graph alone shows none.
|
|
62
|
+
for (const inner of getSourceModules(module)) {
|
|
63
|
+
let entry = reach.get(inner);
|
|
64
|
+
|
|
65
|
+
if (entry === undefined) {
|
|
66
|
+
reach.set(
|
|
67
|
+
inner,
|
|
68
|
+
(entry = { chunks: new Set(), entrypoints: new Set() })
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
entry.chunks.add(chunk);
|
|
73
|
+
entry.entrypoints.add(name);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** @type {EntrypointOverlapDetails[]} */
|
|
80
|
+
const overlapping = [];
|
|
81
|
+
let wasted = 0;
|
|
82
|
+
|
|
83
|
+
for (const [module, { chunks, entrypoints: names }] of reach) {
|
|
84
|
+
// One chunk reached from several entrypoints is downloaded once, so
|
|
85
|
+
// only separate copies cost anything.
|
|
86
|
+
if (chunks.size < 2 || names.size < 2) continue;
|
|
87
|
+
|
|
88
|
+
const extra = getModuleSize(module) * (chunks.size - 1);
|
|
89
|
+
|
|
90
|
+
wasted += extra;
|
|
91
|
+
overlapping.push({
|
|
92
|
+
name: module.readableIdentifier(requestShortener),
|
|
93
|
+
entrypoints: [...names].sort(compareStrings),
|
|
94
|
+
wasted: extra
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (overlapping.length === 0) return;
|
|
99
|
+
|
|
100
|
+
// Ties break by name: which modules finish first is not stable.
|
|
101
|
+
overlapping.sort(
|
|
102
|
+
(a, b) => b.wasted - a.wasted || compareStrings(a.name, b.name)
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
const warning = new EntrypointOverlapWarning(
|
|
106
|
+
overlapping.slice(0, MAX_REPORTED_MODULES),
|
|
107
|
+
wasted
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
if (hints === "error") {
|
|
111
|
+
compilation.errors.push(warning);
|
|
112
|
+
} else if (hints === "stats") {
|
|
113
|
+
compilation.hints.push(warning);
|
|
114
|
+
} else {
|
|
115
|
+
compilation.warnings.push(warning);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
module.exports = EntrypointOverlapPlugin;
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
const WebpackError = require("../errors/WebpackError");
|
|
9
9
|
const formatSize = require("../util/formatSize");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
11
|
+
/** @import { EntrypointDetails } from "./SizeLimitsPlugin" */
|
|
12
12
|
|
|
13
13
|
class EntrypointsOverSizeLimitWarning extends WebpackError {
|
|
14
14
|
/**
|