@depup/webpack 5.109.2-depup.0 → 5.110.1-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 +26 -17
- 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 +117 -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 +50 -13
- 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 +101 -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 +32 -47
- 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 +141 -85
- 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 +332 -169
- package/lib/RuntimeTemplate.js +2792 -352
- 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 +2 -2
- 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 +261 -79
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +36 -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 +57 -24
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +168 -88
- 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 +5324 -0
- package/lib/css/syntax.js +9579 -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 +156 -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 +4 -4
- 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 +13 -10
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
- 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 +27 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -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 +37 -29
- 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 +2 -2
- package/lib/dependencies/ImportDependency.js +24 -20
- 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 +49 -35
- 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 +51 -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 +46 -28
- package/lib/dependencies/WorkerDependency.js +28 -22
- package/lib/dependencies/WorkletDependency.js +15 -14
- package/lib/dependencies/getFunctionExpression.js +8 -4
- 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/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/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 +89 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +155 -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 +282 -162
- 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 +5557 -1155
- 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 +98 -113
- 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 +14 -1
- 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 +72 -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 +985 -470
- package/lib/optimize/ConstExportsPlugin.js +11 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +9 -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 +10 -6
- 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 -78
- 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 +1 -1
- 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 +23 -6
- 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 +24 -15
- 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 +7 -7
- 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 +12 -14
- package/lib/url/URLParserPlugin.js +26 -13
- 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 +1050 -24
- package/lib/util/StringXor.js +1 -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 +5 -1
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- 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 +6 -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/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 +41 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -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 +34 -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 +101 -19
- package/lib/web/FetchCompileWasmPlugin.js +46 -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 +670 -36
- 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 +3144 -454
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
|
@@ -0,0 +1,225 @@
|
|
|
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 AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
|
9
|
+
const Entrypoint = require("../Entrypoint");
|
|
10
|
+
const RedundantDynamicImportWarning = require("../errors/RedundantDynamicImportWarning");
|
|
11
|
+
const { compareStrings } = require("../util/comparators");
|
|
12
|
+
const formatLocation = require("../util/formatLocation");
|
|
13
|
+
|
|
14
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
15
|
+
/** @import Chunk from "../Chunk" */
|
|
16
|
+
/** @import ChunkGroup from "../ChunkGroup" */
|
|
17
|
+
/** @import Compiler from "../Compiler" */
|
|
18
|
+
/** @import DependenciesBlock from "../DependenciesBlock" */
|
|
19
|
+
/** @import Module from "../Module" */
|
|
20
|
+
|
|
21
|
+
const PLUGIN_NAME = "RedundantDynamicImportsPlugin";
|
|
22
|
+
|
|
23
|
+
// Enough to name the offenders without printing every call site.
|
|
24
|
+
const MAX_REPORTED_IMPORTS = 5;
|
|
25
|
+
|
|
26
|
+
class RedundantDynamicImportsPlugin {
|
|
27
|
+
/**
|
|
28
|
+
* Creates an instance of RedundantDynamicImportsPlugin.
|
|
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
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
47
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
48
|
+
const { chunkGraph, moduleGraph, requestShortener } = compilation;
|
|
49
|
+
/** @type {string[]} */
|
|
50
|
+
const descriptions = [];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The chunks certain to be loaded when `chunk` runs: itself, plus what
|
|
54
|
+
* every entrypoint able to reach it brings. Entrypoints are alternative
|
|
55
|
+
* load paths, so they are intersected — one that carries the target says
|
|
56
|
+
* nothing about a page that loads another. A shared runtime name is not
|
|
57
|
+
* enough either: with `runtimeChunk: "single"` two entrypoints share one
|
|
58
|
+
* runtime while neither loads the other's initial chunks.
|
|
59
|
+
* @param {Chunk} chunk the chunk the importer runs in
|
|
60
|
+
* @returns {Set<Chunk>} the chunks loaded before it runs
|
|
61
|
+
*/
|
|
62
|
+
const computeLoadedChunks = (chunk) => {
|
|
63
|
+
const chunks = new Set([chunk]);
|
|
64
|
+
/** @type {Set<ChunkGroup>} */
|
|
65
|
+
const entrypoints = new Set();
|
|
66
|
+
/** @type {Set<ChunkGroup>} */
|
|
67
|
+
const queue = new Set(chunk.groupsIterable);
|
|
68
|
+
|
|
69
|
+
for (const group of queue) {
|
|
70
|
+
// An entrypoint is a load path in itself and carries nothing of
|
|
71
|
+
// what reaches it: an async one — a worker — starts from its own
|
|
72
|
+
// chunks, however much the module spawning it had loaded.
|
|
73
|
+
if (group.isInitial() || group instanceof Entrypoint) {
|
|
74
|
+
entrypoints.add(group);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Only initial chunks are certain: an async ancestor is loaded on
|
|
79
|
+
// the path taken, and a group can be reached by several.
|
|
80
|
+
for (const parent of group.getParents()) queue.add(parent);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (entrypoints.size === 0) return chunks;
|
|
84
|
+
|
|
85
|
+
/** @type {Set<Chunk> | undefined} */
|
|
86
|
+
let common;
|
|
87
|
+
|
|
88
|
+
for (const entrypoint of entrypoints) {
|
|
89
|
+
/** @type {Set<Chunk>} */
|
|
90
|
+
const loaded = new Set();
|
|
91
|
+
/** @type {Set<ChunkGroup>} */
|
|
92
|
+
const chain = new Set([entrypoint]);
|
|
93
|
+
|
|
94
|
+
// An entrypoint reached through `dependOn` is loaded first too, so
|
|
95
|
+
// within one path they add up rather than cancel each other out.
|
|
96
|
+
for (const group of chain) {
|
|
97
|
+
for (const member of group.chunks) loaded.add(member);
|
|
98
|
+
for (const parent of group.getParents()) chain.add(parent);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (common === undefined) {
|
|
102
|
+
common = loaded;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
for (const member of common) {
|
|
107
|
+
if (!loaded.has(member)) common.delete(member);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
for (const member of /** @type {Set<Chunk>} */ (common)) {
|
|
112
|
+
chunks.add(member);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return chunks;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
// The answer depends on the chunk alone, and every module sharing one
|
|
119
|
+
// asks the same question. Dropped with the hook it is built in.
|
|
120
|
+
/** @type {Map<Chunk, Set<Chunk>>} */
|
|
121
|
+
const loadedChunks = new Map();
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* @param {Chunk} chunk the chunk the importer runs in
|
|
125
|
+
* @returns {Set<Chunk>} the chunks loaded before it runs
|
|
126
|
+
*/
|
|
127
|
+
const getLoadedChunks = (chunk) => {
|
|
128
|
+
let loaded = loadedChunks.get(chunk);
|
|
129
|
+
|
|
130
|
+
if (loaded === undefined) {
|
|
131
|
+
loaded = computeLoadedChunks(chunk);
|
|
132
|
+
loadedChunks.set(chunk, loaded);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return loaded;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @param {DependenciesBlock} block the block to walk
|
|
140
|
+
* @param {Module} importer the module the block belongs to
|
|
141
|
+
* @param {Set<Chunk>[]} contexts what is loaded in each place it runs
|
|
142
|
+
* @returns {void}
|
|
143
|
+
*/
|
|
144
|
+
const walk = (block, importer, contexts) => {
|
|
145
|
+
for (const nested of block.blocks) {
|
|
146
|
+
if (nested instanceof AsyncDependenciesBlock) {
|
|
147
|
+
for (const dependency of nested.dependencies) {
|
|
148
|
+
const target = moduleGraph.getModule(dependency);
|
|
149
|
+
|
|
150
|
+
if (!target) continue;
|
|
151
|
+
|
|
152
|
+
// Redundant only where it is redundant everywhere: a shared
|
|
153
|
+
// importer still defers for an entry that lacks the target.
|
|
154
|
+
let redundant = true;
|
|
155
|
+
|
|
156
|
+
for (const loaded of contexts) {
|
|
157
|
+
let present = false;
|
|
158
|
+
|
|
159
|
+
for (const chunk of chunkGraph.getModuleChunksIterable(
|
|
160
|
+
target
|
|
161
|
+
)) {
|
|
162
|
+
if (loaded.has(chunk)) {
|
|
163
|
+
present = true;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (!present) {
|
|
169
|
+
redundant = false;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (!redundant) continue;
|
|
175
|
+
|
|
176
|
+
descriptions.push(
|
|
177
|
+
`${importer.readableIdentifier(requestShortener)}${
|
|
178
|
+
nested.loc ? ` ${formatLocation(nested.loc)}` : ""
|
|
179
|
+
} imports ${target.readableIdentifier(requestShortener)}`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
walk(nested, importer, contexts);
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
for (const module of compilation.modules) {
|
|
189
|
+
if (module.blocks.length === 0) continue;
|
|
190
|
+
|
|
191
|
+
/** @type {Set<Chunk>[]} */
|
|
192
|
+
const contexts = [];
|
|
193
|
+
|
|
194
|
+
for (const chunk of chunkGraph.getModuleChunksIterable(module)) {
|
|
195
|
+
contexts.push(getLoadedChunks(chunk));
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
if (contexts.length === 0) continue;
|
|
199
|
+
|
|
200
|
+
walk(module, module, contexts);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
if (descriptions.length === 0) return;
|
|
204
|
+
|
|
205
|
+
// Module order is not stable across runtimes, so the reported subset
|
|
206
|
+
// would otherwise differ between them.
|
|
207
|
+
descriptions.sort(compareStrings);
|
|
208
|
+
|
|
209
|
+
const warning = new RedundantDynamicImportWarning(
|
|
210
|
+
descriptions.slice(0, MAX_REPORTED_IMPORTS)
|
|
211
|
+
);
|
|
212
|
+
|
|
213
|
+
if (hints === "error") {
|
|
214
|
+
compilation.errors.push(warning);
|
|
215
|
+
} else if (hints === "stats") {
|
|
216
|
+
compilation.hints.push(warning);
|
|
217
|
+
} else {
|
|
218
|
+
compilation.warnings.push(warning);
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
module.exports = RedundantDynamicImportsPlugin;
|
|
@@ -0,0 +1,27 @@
|
|
|
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
|
+
class RuntimeInLargeChunkWarning extends WebpackError {
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of RuntimeInLargeChunkWarning.
|
|
13
|
+
* @param {string[]} entrypoints names of the entrypoints carrying the runtime
|
|
14
|
+
*/
|
|
15
|
+
constructor(entrypoints) {
|
|
16
|
+
super(
|
|
17
|
+
`webpack performance recommendations: \nThe runtime is part of the initial chunk of ${entrypoints.join(
|
|
18
|
+
", "
|
|
19
|
+
)}. It describes every other chunk, so a change anywhere in the build rewrites these assets and clients download them again.\nSet 'optimization.runtimeChunk' to emit the runtime as its own chunk.\nFor more info visit https://webpack.js.org/configuration/optimization/#optimizationruntimechunk`
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
/** @type {string} */
|
|
23
|
+
this.name = "RuntimeInLargeChunkWarning";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = RuntimeInLargeChunkWarning;
|
|
@@ -0,0 +1,164 @@
|
|
|
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 ScopeHoistingBailoutsWarning = require("../errors/ScopeHoistingBailoutsWarning");
|
|
9
|
+
const {
|
|
10
|
+
BAILOUT_PREFIX,
|
|
11
|
+
REJECTED_PREFIX
|
|
12
|
+
} = require("../optimize/ModuleConcatenationPlugin");
|
|
13
|
+
const { compareStrings } = require("../util/comparators");
|
|
14
|
+
const getModuleSize = require("./getModuleSize");
|
|
15
|
+
|
|
16
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
17
|
+
/** @import Compiler from "../Compiler" */
|
|
18
|
+
/** @import Module from "../Module" */
|
|
19
|
+
/** @import RequestShortener from "../RequestShortener" */
|
|
20
|
+
/**
|
|
21
|
+
* @import {
|
|
22
|
+
* ScopeHoistingBailoutGroup
|
|
23
|
+
* } from "../errors/ScopeHoistingBailoutsWarning"
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const PLUGIN_NAME = "ScopeHoistingBailoutsPlugin";
|
|
27
|
+
|
|
28
|
+
// Reasons repeat far more than they differ, so a few name the problem.
|
|
29
|
+
const MAX_REPORTED_REASONS = 5;
|
|
30
|
+
|
|
31
|
+
// Enough per reason to recognize the offenders without listing every module.
|
|
32
|
+
const MAX_REPORTED_NAMES = 3;
|
|
33
|
+
|
|
34
|
+
// A source position makes two identical reasons look like two problems.
|
|
35
|
+
const POSITION_REGEXP = / at \d+:\d+-\d+$/;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The module's own reasons for staying out of a scope, without the ones it
|
|
39
|
+
* only carries because something it imports bailed out.
|
|
40
|
+
* @param {(string | ((requestShortener: RequestShortener) => string))[]} bailouts what the module graph recorded
|
|
41
|
+
* @param {RequestShortener} requestShortener the request shortener
|
|
42
|
+
* @returns {string[]} the reasons, stripped of their prefix and position
|
|
43
|
+
*/
|
|
44
|
+
const getOwnReasons = (bailouts, requestShortener) => {
|
|
45
|
+
/** @type {string[]} */
|
|
46
|
+
const reasons = [];
|
|
47
|
+
|
|
48
|
+
for (const bailout of bailouts) {
|
|
49
|
+
const message =
|
|
50
|
+
typeof bailout === "function" ? bailout(requestShortener) : bailout;
|
|
51
|
+
|
|
52
|
+
if (!message.startsWith(BAILOUT_PREFIX)) continue;
|
|
53
|
+
|
|
54
|
+
const reason = message.slice(BAILOUT_PREFIX.length);
|
|
55
|
+
|
|
56
|
+
// One root lists every module it could not take in; each of those
|
|
57
|
+
// modules reports the same problem itself.
|
|
58
|
+
if (reason.startsWith(REJECTED_PREFIX)) continue;
|
|
59
|
+
|
|
60
|
+
reasons.push(reason.replace(POSITION_REGEXP, ""));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return reasons;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
class ScopeHoistingBailoutsPlugin {
|
|
67
|
+
/**
|
|
68
|
+
* Creates an instance of ScopeHoistingBailoutsPlugin.
|
|
69
|
+
* @param {PerformanceOptions} options the plugin options
|
|
70
|
+
*/
|
|
71
|
+
constructor(options) {
|
|
72
|
+
/** @type {PerformanceOptions["hints"]} */
|
|
73
|
+
this.hints = options.hints;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
78
|
+
* @param {Compiler} compiler the compiler instance
|
|
79
|
+
* @returns {void}
|
|
80
|
+
*/
|
|
81
|
+
apply(compiler) {
|
|
82
|
+
const hints = this.hints;
|
|
83
|
+
|
|
84
|
+
if (!hints) return;
|
|
85
|
+
|
|
86
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
87
|
+
// After seal: a module that was hoisted is gone from `modules` by now,
|
|
88
|
+
// absorbed into the concatenation that took it.
|
|
89
|
+
compilation.hooks.afterSeal.tap(PLUGIN_NAME, () => {
|
|
90
|
+
const { chunkGraph, moduleGraph, requestShortener } = compilation;
|
|
91
|
+
/** @type {Map<string, { size: number, name: string }[]>} */
|
|
92
|
+
const byReason = new Map();
|
|
93
|
+
/** @type {Set<Module>} */
|
|
94
|
+
const affected = new Set();
|
|
95
|
+
|
|
96
|
+
for (const module of compilation.modules) {
|
|
97
|
+
// One webpack left out was never a candidate.
|
|
98
|
+
if (chunkGraph.getNumberOfModuleChunks(module) === 0) continue;
|
|
99
|
+
|
|
100
|
+
const reasons = getOwnReasons(
|
|
101
|
+
moduleGraph.getOptimizationBailout(module),
|
|
102
|
+
requestShortener
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
if (reasons.length === 0) continue;
|
|
106
|
+
|
|
107
|
+
affected.add(module);
|
|
108
|
+
|
|
109
|
+
const entry = {
|
|
110
|
+
name: module.readableIdentifier(requestShortener),
|
|
111
|
+
size: getModuleSize(module)
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
for (const reason of new Set(reasons)) {
|
|
115
|
+
const modules = byReason.get(reason);
|
|
116
|
+
|
|
117
|
+
if (modules === undefined) {
|
|
118
|
+
byReason.set(reason, [entry]);
|
|
119
|
+
} else {
|
|
120
|
+
modules.push(entry);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (affected.size === 0) return;
|
|
126
|
+
|
|
127
|
+
/** @type {ScopeHoistingBailoutGroup[]} */
|
|
128
|
+
const groups = [];
|
|
129
|
+
|
|
130
|
+
for (const [reason, modules] of byReason) {
|
|
131
|
+
// Ties break by name: module order is not stable across runtimes.
|
|
132
|
+
modules.sort(
|
|
133
|
+
(a, b) => b.size - a.size || compareStrings(a.name, b.name)
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
groups.push({
|
|
137
|
+
reason,
|
|
138
|
+
count: modules.length,
|
|
139
|
+
names: modules.slice(0, MAX_REPORTED_NAMES).map((m) => m.name)
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
groups.sort(
|
|
144
|
+
(a, b) => b.count - a.count || compareStrings(a.reason, b.reason)
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
const warning = new ScopeHoistingBailoutsWarning(
|
|
148
|
+
groups.slice(0, MAX_REPORTED_REASONS),
|
|
149
|
+
affected.size
|
|
150
|
+
);
|
|
151
|
+
|
|
152
|
+
if (hints === "error") {
|
|
153
|
+
compilation.errors.push(warning);
|
|
154
|
+
} else if (hints === "stats") {
|
|
155
|
+
compilation.hints.push(warning);
|
|
156
|
+
} else {
|
|
157
|
+
compilation.warnings.push(warning);
|
|
158
|
+
}
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
module.exports = ScopeHoistingBailoutsPlugin;
|
|
@@ -5,24 +5,40 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
9
|
+
const RuntimeModule = require("../RuntimeModule");
|
|
8
10
|
const { find } = require("../util/SetHelpers");
|
|
11
|
+
const { compareStrings } = require("../util/comparators");
|
|
9
12
|
const AssetsOverSizeLimitWarning = require("./AssetsOverSizeLimitWarning");
|
|
10
13
|
const EntrypointsOverSizeLimitWarning = require("./EntrypointsOverSizeLimitWarning");
|
|
11
14
|
const NoAsyncChunksWarning = require("./NoAsyncChunksWarning");
|
|
15
|
+
const RuntimeInLargeChunkWarning = require("./RuntimeInLargeChunkWarning");
|
|
16
|
+
const getModuleSize = require("./getModuleSize");
|
|
12
17
|
|
|
13
|
-
/** @
|
|
14
|
-
/** @
|
|
15
|
-
/** @
|
|
16
|
-
/** @
|
|
17
|
-
/** @
|
|
18
|
-
/** @
|
|
19
|
-
/** @
|
|
18
|
+
/** @import { Source } from "webpack-sources" */
|
|
19
|
+
/** @import { PerformanceOptions } from "../../declarations/WebpackOptions" */
|
|
20
|
+
/** @import Chunk from "../Chunk" */
|
|
21
|
+
/** @import ChunkGraph from "../ChunkGraph" */
|
|
22
|
+
/** @import ChunkGroup from "../ChunkGroup" */
|
|
23
|
+
/** @import Compilation, { Asset } from "../Compilation" */
|
|
24
|
+
/** @import Compiler from "../Compiler" */
|
|
25
|
+
/** @import Module from "../Module" */
|
|
26
|
+
/** @import Entrypoint from "../Entrypoint" */
|
|
27
|
+
/** @import WebpackError from "../errors/WebpackError" */
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Defines the module details type used by this module.
|
|
31
|
+
* @typedef {object} ModuleDetails
|
|
32
|
+
* @property {string} name
|
|
33
|
+
* @property {number} size
|
|
34
|
+
*/
|
|
20
35
|
|
|
21
36
|
/**
|
|
22
37
|
* Defines the asset details type used by this module.
|
|
23
38
|
* @typedef {object} AssetDetails
|
|
24
39
|
* @property {string} name
|
|
25
40
|
* @property {number} size
|
|
41
|
+
* @property {ModuleDetails[]=} modules
|
|
26
42
|
*/
|
|
27
43
|
|
|
28
44
|
/**
|
|
@@ -41,6 +57,108 @@ const isOverSizeLimitSet = new WeakSet();
|
|
|
41
57
|
/** @type {AssetFilter} */
|
|
42
58
|
const excludeSourceMap = (name, source, info) => !info.development;
|
|
43
59
|
|
|
60
|
+
// Runtime globals whose generated code describes the other chunks, so the chunk
|
|
61
|
+
// holding them is rewritten whenever anything else in the build changes.
|
|
62
|
+
const BUILD_WIDE_RUNTIME_GLOBALS = [
|
|
63
|
+
RuntimeGlobals.getChunkScriptFilename,
|
|
64
|
+
RuntimeGlobals.getChunkCssFilename,
|
|
65
|
+
RuntimeGlobals.getChunkUpdateScriptFilename,
|
|
66
|
+
RuntimeGlobals.getFullHash,
|
|
67
|
+
RuntimeGlobals.getUpdateManifestFilename
|
|
68
|
+
];
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Tells whether an entrypoint ships its runtime inside a chunk that also carries
|
|
72
|
+
* modules, and that runtime describes the rest of the build. Only then does
|
|
73
|
+
* `optimization.runtimeChunk` win anything.
|
|
74
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
|
75
|
+
* @param {Entrypoint} entrypoint an entrypoint
|
|
76
|
+
* @returns {boolean} true when splitting the runtime off would keep the chunk stable
|
|
77
|
+
*/
|
|
78
|
+
const hasEmbeddedRuntime = (chunkGraph, entrypoint) => {
|
|
79
|
+
const runtimeChunk = entrypoint.getRuntimeChunk();
|
|
80
|
+
if (!runtimeChunk) return false;
|
|
81
|
+
// A chunk of its own carries the runtime modules and nothing else. Asking each
|
|
82
|
+
// module beats counting, which depends on runtime modules being counted twice.
|
|
83
|
+
let carriesCode = false;
|
|
84
|
+
for (const module of chunkGraph.getChunkModulesIterable(runtimeChunk)) {
|
|
85
|
+
if (!(module instanceof RuntimeModule)) {
|
|
86
|
+
carriesCode = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (!carriesCode) return false;
|
|
91
|
+
// The tree requirements are the ones the emitted runtime modules answer to.
|
|
92
|
+
const runtimeRequirements =
|
|
93
|
+
chunkGraph.getTreeRuntimeRequirements(runtimeChunk);
|
|
94
|
+
// A global nothing here names stays silent, so a new one costs a hint, not a wrong one.
|
|
95
|
+
return BUILD_WIDE_RUNTIME_GLOBALS.some((runtimeGlobal) =>
|
|
96
|
+
runtimeRequirements.has(runtimeGlobal)
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
// Enough to point at the culprit without turning the hint into a report.
|
|
101
|
+
const MAX_REPORTED_MODULES = 3;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Names the largest modules inside each oversized asset. "This file is too big"
|
|
105
|
+
* is only actionable once you know what fills it.
|
|
106
|
+
* @param {Compilation} compilation the compilation
|
|
107
|
+
* @param {AssetDetails[]} assetsOverSizeLimit the oversized assets, annotated in place
|
|
108
|
+
* @returns {void}
|
|
109
|
+
*/
|
|
110
|
+
const addLargestModules = (compilation, assetsOverSizeLimit) => {
|
|
111
|
+
const { chunkGraph, requestShortener } = compilation;
|
|
112
|
+
/** @type {Map<string, Chunk[]>} */
|
|
113
|
+
const chunksByFile = new Map();
|
|
114
|
+
|
|
115
|
+
for (const chunk of compilation.chunks) {
|
|
116
|
+
// A chunk emitting several files (javascript plus extracted css, …) gives
|
|
117
|
+
// no way to tell which module ended up in which, so it names none.
|
|
118
|
+
if (chunk.files.size !== 1) continue;
|
|
119
|
+
|
|
120
|
+
for (const file of chunk.files) {
|
|
121
|
+
const chunks = chunksByFile.get(file);
|
|
122
|
+
|
|
123
|
+
if (chunks === undefined) {
|
|
124
|
+
chunksByFile.set(file, [chunk]);
|
|
125
|
+
} else {
|
|
126
|
+
chunks.push(chunk);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
for (const asset of assetsOverSizeLimit) {
|
|
132
|
+
const chunks = chunksByFile.get(asset.name);
|
|
133
|
+
|
|
134
|
+
// An asset a loader or plugin emitted belongs to no chunk, so nothing
|
|
135
|
+
// describes its contents; likewise one whose chunk emits several files.
|
|
136
|
+
if (chunks === undefined) continue;
|
|
137
|
+
|
|
138
|
+
/** @type {Set<Module>} */
|
|
139
|
+
const seen = new Set();
|
|
140
|
+
/** @type {ModuleDetails[]} */
|
|
141
|
+
const modules = [];
|
|
142
|
+
|
|
143
|
+
for (const chunk of chunks) {
|
|
144
|
+
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
|
145
|
+
if (seen.has(module)) continue;
|
|
146
|
+
seen.add(module);
|
|
147
|
+
modules.push({
|
|
148
|
+
name: module.readableIdentifier(requestShortener),
|
|
149
|
+
size: getModuleSize(module)
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
if (modules.length === 0) continue;
|
|
155
|
+
|
|
156
|
+
// Ties break by name: which modules finish first is not stable.
|
|
157
|
+
modules.sort((a, b) => b.size - a.size || compareStrings(a.name, b.name));
|
|
158
|
+
asset.modules = modules.slice(0, MAX_REPORTED_MODULES);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
44
162
|
const PLUGIN_NAME = "SizeLimitsPlugin";
|
|
45
163
|
|
|
46
164
|
module.exports = class SizeLimitsPlugin {
|
|
@@ -132,6 +250,8 @@ module.exports = class SizeLimitsPlugin {
|
|
|
132
250
|
|
|
133
251
|
/** @type {EntrypointDetails[]} */
|
|
134
252
|
const entrypointsOverLimit = [];
|
|
253
|
+
/** @type {string[]} */
|
|
254
|
+
const entrypointsWithEmbeddedRuntime = [];
|
|
135
255
|
for (const [name, entry] of compilation.entrypoints) {
|
|
136
256
|
const size = getEntrypointSize(entry);
|
|
137
257
|
|
|
@@ -142,6 +262,9 @@ module.exports = class SizeLimitsPlugin {
|
|
|
142
262
|
files: entry.getFiles().filter(fileFilter)
|
|
143
263
|
});
|
|
144
264
|
isOverSizeLimitSet.add(entry);
|
|
265
|
+
if (hasEmbeddedRuntime(compilation.chunkGraph, entry)) {
|
|
266
|
+
entrypointsWithEmbeddedRuntime.push(name);
|
|
267
|
+
}
|
|
145
268
|
}
|
|
146
269
|
}
|
|
147
270
|
|
|
@@ -151,6 +274,7 @@ module.exports = class SizeLimitsPlugin {
|
|
|
151
274
|
// 3. No Async Chunks
|
|
152
275
|
// if !1, then 2, if !2 return
|
|
153
276
|
if (assetsOverSizeLimit.length > 0) {
|
|
277
|
+
addLargestModules(compilation, assetsOverSizeLimit);
|
|
154
278
|
warnings.push(
|
|
155
279
|
new AssetsOverSizeLimitWarning(
|
|
156
280
|
assetsOverSizeLimit,
|
|
@@ -177,8 +301,16 @@ module.exports = class SizeLimitsPlugin {
|
|
|
177
301
|
warnings.push(new NoAsyncChunksWarning());
|
|
178
302
|
}
|
|
179
303
|
|
|
304
|
+
if (entrypointsWithEmbeddedRuntime.length > 0) {
|
|
305
|
+
warnings.push(
|
|
306
|
+
new RuntimeInLargeChunkWarning(entrypointsWithEmbeddedRuntime)
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
180
310
|
if (hints === "error") {
|
|
181
311
|
compilation.errors.push(...warnings);
|
|
312
|
+
} else if (hints === "stats") {
|
|
313
|
+
compilation.hints.push(...warnings);
|
|
182
314
|
} else {
|
|
183
315
|
compilation.warnings.push(...warnings);
|
|
184
316
|
}
|