webpack 5.97.1 → 5.104.1
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 +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -5,42 +5,45 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const eslintScope = require("eslint-scope");
|
|
9
|
-
const { SyncWaterfallHook, SyncHook, SyncBailHook } = require("tapable");
|
|
10
8
|
const vm = require("vm");
|
|
9
|
+
const eslintScope = require("eslint-scope");
|
|
10
|
+
const { SyncBailHook, SyncHook, SyncWaterfallHook } = require("tapable");
|
|
11
11
|
const {
|
|
12
|
+
CachedSource,
|
|
12
13
|
ConcatSource,
|
|
13
14
|
OriginalSource,
|
|
14
15
|
PrefixSource,
|
|
15
16
|
RawSource,
|
|
16
|
-
CachedSource,
|
|
17
17
|
ReplaceSource
|
|
18
18
|
} = require("webpack-sources");
|
|
19
19
|
const Compilation = require("../Compilation");
|
|
20
20
|
const { tryRunOrWebpackError } = require("../HookWebpackError");
|
|
21
21
|
const HotUpdateChunk = require("../HotUpdateChunk");
|
|
22
22
|
const InitFragment = require("../InitFragment");
|
|
23
|
+
const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
|
|
23
24
|
const {
|
|
24
25
|
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
25
26
|
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
26
27
|
JAVASCRIPT_MODULE_TYPE_ESM,
|
|
27
28
|
WEBPACK_MODULE_TYPE_RUNTIME
|
|
28
29
|
} = require("../ModuleTypeConstants");
|
|
30
|
+
const NormalModule = require("../NormalModule");
|
|
29
31
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
30
32
|
const Template = require("../Template");
|
|
31
33
|
const { last, someInIterable } = require("../util/IterableHelpers");
|
|
32
34
|
const StringXor = require("../util/StringXor");
|
|
33
|
-
const {
|
|
35
|
+
const { compareModulesByIdOrIdentifier } = require("../util/comparators");
|
|
34
36
|
const {
|
|
35
|
-
getPathInAst,
|
|
36
|
-
getAllReferences,
|
|
37
37
|
RESERVED_NAMES,
|
|
38
|
-
findNewName,
|
|
39
38
|
addScopeSymbols,
|
|
39
|
+
findNewName,
|
|
40
|
+
getAllReferences,
|
|
41
|
+
getPathInAst,
|
|
40
42
|
getUsedNamesInScopeInfo
|
|
41
43
|
} = require("../util/concatenate");
|
|
42
44
|
const createHash = require("../util/createHash");
|
|
43
45
|
const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
|
|
46
|
+
const removeBOM = require("../util/removeBOM");
|
|
44
47
|
const { intersectRuntime } = require("../util/runtime");
|
|
45
48
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
|
46
49
|
const JavascriptParser = require("./JavascriptParser");
|
|
@@ -48,13 +51,14 @@ const JavascriptParser = require("./JavascriptParser");
|
|
|
48
51
|
/** @typedef {import("eslint-scope").Reference} Reference */
|
|
49
52
|
/** @typedef {import("eslint-scope").Scope} Scope */
|
|
50
53
|
/** @typedef {import("eslint-scope").Variable} Variable */
|
|
54
|
+
/** @typedef {import("estree").Program} Program */
|
|
51
55
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
52
|
-
/** @typedef {import("
|
|
56
|
+
/** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
|
|
53
57
|
/** @typedef {import("../Chunk")} Chunk */
|
|
54
58
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
55
59
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
|
56
60
|
/** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
|
|
57
|
-
/** @typedef {import("../Compilation").
|
|
61
|
+
/** @typedef {import("../Compilation").ExecuteModuleObject} ExecuteModuleObject */
|
|
58
62
|
/** @typedef {import("../Compiler")} Compiler */
|
|
59
63
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
|
60
64
|
/** @typedef {import("../Entrypoint")} Entrypoint */
|
|
@@ -66,7 +70,6 @@ const JavascriptParser = require("./JavascriptParser");
|
|
|
66
70
|
/** @typedef {import("../WebpackError")} WebpackError */
|
|
67
71
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
68
72
|
/** @typedef {import("../util/Hash")} Hash */
|
|
69
|
-
/** @typedef {import("../util/createHash").Algorithm} Algorithm */
|
|
70
73
|
|
|
71
74
|
/**
|
|
72
75
|
* @param {Chunk} chunk a chunk
|
|
@@ -77,7 +80,7 @@ const chunkHasJs = (chunk, chunkGraph) => {
|
|
|
77
80
|
if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true;
|
|
78
81
|
|
|
79
82
|
return Boolean(
|
|
80
|
-
chunkGraph.getChunkModulesIterableBySourceType(chunk,
|
|
83
|
+
chunkGraph.getChunkModulesIterableBySourceType(chunk, JAVASCRIPT_TYPE)
|
|
81
84
|
);
|
|
82
85
|
};
|
|
83
86
|
|
|
@@ -92,11 +95,12 @@ const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
|
|
|
92
95
|
chunk,
|
|
93
96
|
WEBPACK_MODULE_TYPE_RUNTIME
|
|
94
97
|
)
|
|
95
|
-
)
|
|
98
|
+
) {
|
|
96
99
|
return true;
|
|
100
|
+
}
|
|
97
101
|
|
|
98
102
|
return Boolean(
|
|
99
|
-
chunkGraph.getChunkModulesIterableBySourceType(chunk,
|
|
103
|
+
chunkGraph.getChunkModulesIterableBySourceType(chunk, JAVASCRIPT_TYPE)
|
|
100
104
|
);
|
|
101
105
|
};
|
|
102
106
|
|
|
@@ -113,10 +117,10 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
113
117
|
/**
|
|
114
118
|
* @param {string} line the line
|
|
115
119
|
* @param {number} i the index
|
|
116
|
-
* @param {string[]}
|
|
120
|
+
* @param {string[]} _lines the lines
|
|
117
121
|
* @returns {string} the line with line number
|
|
118
122
|
*/
|
|
119
|
-
(line, i,
|
|
123
|
+
(line, i, _lines) => {
|
|
120
124
|
const iStr = `${i + 1}`;
|
|
121
125
|
return `${" ".repeat(n - iStr.length)}${iStr} | ${line}`;
|
|
122
126
|
}
|
|
@@ -169,20 +173,46 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
|
169
173
|
* @property {string} hash hash to be used for render call
|
|
170
174
|
*/
|
|
171
175
|
|
|
172
|
-
/**
|
|
176
|
+
/**
|
|
177
|
+
* @typedef {object} StartupRenderContext
|
|
178
|
+
* @property {Chunk} chunk the chunk
|
|
179
|
+
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
180
|
+
* @property {RuntimeTemplate} runtimeTemplate the runtime template
|
|
181
|
+
* @property {ModuleGraph} moduleGraph the module graph
|
|
182
|
+
* @property {ChunkGraph} chunkGraph the chunk graph
|
|
183
|
+
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
|
184
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
|
185
|
+
* @property {boolean} inlined inlined
|
|
186
|
+
* @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @typedef {object} ModuleRenderContext
|
|
191
|
+
* @property {Chunk} chunk the chunk
|
|
192
|
+
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
193
|
+
* @property {RuntimeTemplate} runtimeTemplate the runtime template
|
|
194
|
+
* @property {ModuleGraph} moduleGraph the module graph
|
|
195
|
+
* @property {ChunkGraph} chunkGraph the chunk graph
|
|
196
|
+
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
|
197
|
+
* @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
|
|
198
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
|
199
|
+
* @property {boolean} factory true: renders as factory method, false: pure module content
|
|
200
|
+
* @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE, existing only when `factory` is set to false
|
|
201
|
+
* @property {boolean=} renderInObject render module in object container
|
|
202
|
+
*/
|
|
173
203
|
|
|
174
204
|
/**
|
|
175
205
|
* @typedef {object} CompilationHooks
|
|
176
|
-
* @property {SyncWaterfallHook<[Source, Module,
|
|
177
|
-
* @property {SyncWaterfallHook<[Source, Module,
|
|
178
|
-
* @property {SyncWaterfallHook<[Source, Module,
|
|
206
|
+
* @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContent
|
|
207
|
+
* @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContainer
|
|
208
|
+
* @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModulePackage
|
|
179
209
|
* @property {SyncWaterfallHook<[Source, RenderContext]>} renderChunk
|
|
180
210
|
* @property {SyncWaterfallHook<[Source, RenderContext]>} renderMain
|
|
181
211
|
* @property {SyncWaterfallHook<[Source, RenderContext]>} renderContent
|
|
182
212
|
* @property {SyncWaterfallHook<[Source, RenderContext]>} render
|
|
183
213
|
* @property {SyncWaterfallHook<[Source, Module, StartupRenderContext]>} renderStartup
|
|
184
214
|
* @property {SyncWaterfallHook<[string, RenderBootstrapContext]>} renderRequire
|
|
185
|
-
* @property {SyncBailHook<[Module, RenderBootstrapContext], string | void>} inlineInRuntimeBailout
|
|
215
|
+
* @property {SyncBailHook<[Module, Partial<RenderBootstrapContext>], string | void>} inlineInRuntimeBailout
|
|
186
216
|
* @property {SyncBailHook<[Module, RenderContext], string | void>} embedInRuntimeBailout
|
|
187
217
|
* @property {SyncBailHook<[RenderContext], string | void>} strictRuntimeBailout
|
|
188
218
|
* @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
|
|
@@ -213,17 +243,17 @@ class JavascriptModulesPlugin {
|
|
|
213
243
|
renderModuleContent: new SyncWaterfallHook([
|
|
214
244
|
"source",
|
|
215
245
|
"module",
|
|
216
|
-
"
|
|
246
|
+
"moduleRenderContext"
|
|
217
247
|
]),
|
|
218
248
|
renderModuleContainer: new SyncWaterfallHook([
|
|
219
249
|
"source",
|
|
220
250
|
"module",
|
|
221
|
-
"
|
|
251
|
+
"moduleRenderContext"
|
|
222
252
|
]),
|
|
223
253
|
renderModulePackage: new SyncWaterfallHook([
|
|
224
254
|
"source",
|
|
225
255
|
"module",
|
|
226
|
-
"
|
|
256
|
+
"moduleRenderContext"
|
|
227
257
|
]),
|
|
228
258
|
render: new SyncWaterfallHook(["source", "renderContext"]),
|
|
229
259
|
renderContent: new SyncWaterfallHook(["source", "renderContext"]),
|
|
@@ -248,7 +278,7 @@ class JavascriptModulesPlugin {
|
|
|
248
278
|
|
|
249
279
|
constructor(options = {}) {
|
|
250
280
|
this.options = options;
|
|
251
|
-
/** @type {WeakMap<Source,
|
|
281
|
+
/** @type {WeakMap<Source, { source: Source, needModule:boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
|
|
252
282
|
this._moduleFactoryCache = new WeakMap();
|
|
253
283
|
}
|
|
254
284
|
|
|
@@ -262,24 +292,49 @@ class JavascriptModulesPlugin {
|
|
|
262
292
|
PLUGIN_NAME,
|
|
263
293
|
(compilation, { normalModuleFactory }) => {
|
|
264
294
|
const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
295
|
+
|
|
296
|
+
for (const type of [
|
|
297
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
298
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
299
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
|
300
|
+
]) {
|
|
301
|
+
normalModuleFactory.hooks.createParser
|
|
302
|
+
.for(type)
|
|
303
|
+
.tap(PLUGIN_NAME, (options) => {
|
|
304
|
+
switch (type) {
|
|
305
|
+
case JAVASCRIPT_MODULE_TYPE_AUTO: {
|
|
306
|
+
return new JavascriptParser("auto", { parse: options.parse });
|
|
307
|
+
}
|
|
308
|
+
case JAVASCRIPT_MODULE_TYPE_DYNAMIC: {
|
|
309
|
+
return new JavascriptParser("script", {
|
|
310
|
+
parse: options.parse
|
|
311
|
+
});
|
|
312
|
+
}
|
|
313
|
+
case JAVASCRIPT_MODULE_TYPE_ESM: {
|
|
314
|
+
return new JavascriptParser("module", {
|
|
315
|
+
parse: options.parse
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
normalModuleFactory.hooks.createGenerator
|
|
321
|
+
.for(type)
|
|
322
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
|
323
|
+
|
|
324
|
+
NormalModule.getCompilationHooks(compilation).processResult.tap(
|
|
325
|
+
PLUGIN_NAME,
|
|
326
|
+
(result, module) => {
|
|
327
|
+
if (module.type === type) {
|
|
328
|
+
const [source, ...rest] = result;
|
|
329
|
+
|
|
330
|
+
return [removeBOM(source), ...rest];
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
return result;
|
|
334
|
+
}
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
|
|
283
338
|
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
|
284
339
|
const {
|
|
285
340
|
hash,
|
|
@@ -392,10 +447,9 @@ class JavascriptModulesPlugin {
|
|
|
392
447
|
);
|
|
393
448
|
}
|
|
394
449
|
});
|
|
395
|
-
compilation.hooks.contentHash.tap(PLUGIN_NAME, chunk => {
|
|
450
|
+
compilation.hooks.contentHash.tap(PLUGIN_NAME, (chunk) => {
|
|
396
451
|
const {
|
|
397
452
|
chunkGraph,
|
|
398
|
-
codeGenerationResults,
|
|
399
453
|
moduleGraph,
|
|
400
454
|
runtimeTemplate,
|
|
401
455
|
outputOptions: {
|
|
@@ -405,7 +459,10 @@ class JavascriptModulesPlugin {
|
|
|
405
459
|
hashFunction
|
|
406
460
|
}
|
|
407
461
|
} = compilation;
|
|
408
|
-
const
|
|
462
|
+
const codeGenerationResults =
|
|
463
|
+
/** @type {CodeGenerationResults} */
|
|
464
|
+
(compilation.codeGenerationResults);
|
|
465
|
+
const hash = createHash(hashFunction);
|
|
409
466
|
if (hashSalt) hash.update(hashSalt);
|
|
410
467
|
if (chunk.hasRuntime()) {
|
|
411
468
|
this.updateHashWithBootstrap(
|
|
@@ -432,7 +489,7 @@ class JavascriptModulesPlugin {
|
|
|
432
489
|
});
|
|
433
490
|
const modules = chunkGraph.getChunkModulesIterableBySourceType(
|
|
434
491
|
chunk,
|
|
435
|
-
|
|
492
|
+
JAVASCRIPT_TYPE
|
|
436
493
|
);
|
|
437
494
|
if (modules) {
|
|
438
495
|
const xor = new StringXor();
|
|
@@ -452,11 +509,10 @@ class JavascriptModulesPlugin {
|
|
|
452
509
|
}
|
|
453
510
|
xor.updateHash(hash);
|
|
454
511
|
}
|
|
455
|
-
const digest =
|
|
512
|
+
const digest = hash.digest(hashDigest);
|
|
456
513
|
chunk.contentHash.javascript = nonNumericOnlyHash(
|
|
457
514
|
digest,
|
|
458
|
-
|
|
459
|
-
(hashDigestLength)
|
|
515
|
+
hashDigestLength
|
|
460
516
|
);
|
|
461
517
|
});
|
|
462
518
|
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
|
@@ -473,7 +529,8 @@ class JavascriptModulesPlugin {
|
|
|
473
529
|
}
|
|
474
530
|
);
|
|
475
531
|
compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
|
|
476
|
-
const source =
|
|
532
|
+
const source =
|
|
533
|
+
options.codeGenerationResult.sources.get(JAVASCRIPT_TYPE);
|
|
477
534
|
if (source === undefined) return;
|
|
478
535
|
const { module } = options;
|
|
479
536
|
const code = source.source();
|
|
@@ -487,7 +544,7 @@ class JavascriptModulesPlugin {
|
|
|
487
544
|
);
|
|
488
545
|
|
|
489
546
|
const moduleObject =
|
|
490
|
-
/** @type {
|
|
547
|
+
/** @type {ExecuteModuleObject} */
|
|
491
548
|
(options.moduleObject);
|
|
492
549
|
|
|
493
550
|
try {
|
|
@@ -541,37 +598,39 @@ class JavascriptModulesPlugin {
|
|
|
541
598
|
if (chunk.filenameTemplate) {
|
|
542
599
|
return chunk.filenameTemplate;
|
|
543
600
|
} else if (chunk instanceof HotUpdateChunk) {
|
|
544
|
-
return
|
|
601
|
+
return outputOptions.hotUpdateChunkFilename;
|
|
545
602
|
} else if (chunk.canBeInitial()) {
|
|
546
|
-
return
|
|
603
|
+
return outputOptions.filename;
|
|
547
604
|
}
|
|
548
|
-
return
|
|
605
|
+
return outputOptions.chunkFilename;
|
|
549
606
|
}
|
|
550
607
|
|
|
551
608
|
/**
|
|
552
609
|
* @param {Module} module the rendered module
|
|
553
|
-
* @param {
|
|
610
|
+
* @param {ModuleRenderContext} renderContext options object
|
|
554
611
|
* @param {CompilationHooks} hooks hooks
|
|
555
|
-
* @param {boolean} factory true: renders as factory method, false: pure module content
|
|
556
612
|
* @returns {Source | null} the newly generated source from rendering
|
|
557
613
|
*/
|
|
558
|
-
renderModule(module, renderContext, hooks
|
|
614
|
+
renderModule(module, renderContext, hooks) {
|
|
559
615
|
const {
|
|
560
616
|
chunk,
|
|
561
617
|
chunkGraph,
|
|
562
618
|
runtimeTemplate,
|
|
563
619
|
codeGenerationResults,
|
|
564
|
-
strictMode
|
|
620
|
+
strictMode,
|
|
621
|
+
factory,
|
|
622
|
+
renderInObject
|
|
565
623
|
} = renderContext;
|
|
566
624
|
try {
|
|
567
625
|
const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
|
|
568
|
-
const moduleSource = codeGenResult.sources.get(
|
|
626
|
+
const moduleSource = codeGenResult.sources.get(JAVASCRIPT_TYPE);
|
|
569
627
|
if (!moduleSource) return null;
|
|
570
628
|
if (codeGenResult.data !== undefined) {
|
|
571
629
|
const chunkInitFragments = codeGenResult.data.get("chunkInitFragments");
|
|
572
630
|
if (chunkInitFragments) {
|
|
573
|
-
for (const i of chunkInitFragments)
|
|
631
|
+
for (const i of chunkInitFragments) {
|
|
574
632
|
renderContext.chunkInitFragments.push(i);
|
|
633
|
+
}
|
|
575
634
|
}
|
|
576
635
|
}
|
|
577
636
|
const moduleSourcePostContent = tryRunOrWebpackError(
|
|
@@ -599,6 +658,8 @@ class JavascriptModulesPlugin {
|
|
|
599
658
|
const cacheEntry = this._moduleFactoryCache.get(
|
|
600
659
|
moduleSourcePostContent
|
|
601
660
|
);
|
|
661
|
+
const renderShorthand =
|
|
662
|
+
renderInObject === true && runtimeTemplate.supportsMethodShorthand();
|
|
602
663
|
let source;
|
|
603
664
|
if (
|
|
604
665
|
cacheEntry &&
|
|
@@ -606,35 +667,46 @@ class JavascriptModulesPlugin {
|
|
|
606
667
|
cacheEntry.needExports === needExports &&
|
|
607
668
|
cacheEntry.needRequire === needRequire &&
|
|
608
669
|
cacheEntry.needThisAsExports === needThisAsExports &&
|
|
609
|
-
cacheEntry.needStrict === needStrict
|
|
670
|
+
cacheEntry.needStrict === needStrict &&
|
|
671
|
+
cacheEntry.renderShorthand === renderShorthand
|
|
610
672
|
) {
|
|
611
673
|
source = cacheEntry.source;
|
|
612
674
|
} else {
|
|
613
675
|
const factorySource = new ConcatSource();
|
|
614
676
|
const args = [];
|
|
615
|
-
if (needExports || needRequire || needModule)
|
|
677
|
+
if (needExports || needRequire || needModule) {
|
|
616
678
|
args.push(
|
|
617
679
|
needModule
|
|
618
680
|
? module.moduleArgument
|
|
619
681
|
: `__unused_webpack_${module.moduleArgument}`
|
|
620
682
|
);
|
|
621
|
-
|
|
683
|
+
}
|
|
684
|
+
if (needExports || needRequire) {
|
|
622
685
|
args.push(
|
|
623
686
|
needExports
|
|
624
687
|
? module.exportsArgument
|
|
625
688
|
: `__unused_webpack_${module.exportsArgument}`
|
|
626
689
|
);
|
|
690
|
+
}
|
|
627
691
|
if (needRequire) args.push(RuntimeGlobals.require);
|
|
628
|
-
|
|
692
|
+
|
|
693
|
+
if (renderShorthand) {
|
|
694
|
+
// we can optimize function to methodShorthand if render module factory in object
|
|
695
|
+
factorySource.add(`(${args.join(", ")}) {\n\n`);
|
|
696
|
+
} else if (
|
|
697
|
+
!needThisAsExports &&
|
|
698
|
+
runtimeTemplate.supportsArrowFunction()
|
|
699
|
+
) {
|
|
629
700
|
factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
|
|
630
701
|
} else {
|
|
631
702
|
factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
|
|
632
703
|
}
|
|
704
|
+
|
|
633
705
|
if (needStrict) {
|
|
634
706
|
factorySource.add('"use strict";\n');
|
|
635
707
|
}
|
|
636
708
|
factorySource.add(moduleSourcePostContent);
|
|
637
|
-
factorySource.add(
|
|
709
|
+
factorySource.add(`\n\n/***/ }${renderShorthand ? "" : ")"}`);
|
|
638
710
|
source = new CachedSource(factorySource);
|
|
639
711
|
this._moduleFactoryCache.set(moduleSourcePostContent, {
|
|
640
712
|
source,
|
|
@@ -642,7 +714,8 @@ class JavascriptModulesPlugin {
|
|
|
642
714
|
needExports,
|
|
643
715
|
needRequire,
|
|
644
716
|
needThisAsExports,
|
|
645
|
-
needStrict
|
|
717
|
+
needStrict,
|
|
718
|
+
renderShorthand
|
|
646
719
|
});
|
|
647
720
|
}
|
|
648
721
|
moduleSourcePostContainer = tryRunOrWebpackError(
|
|
@@ -677,15 +750,15 @@ class JavascriptModulesPlugin {
|
|
|
677
750
|
const { chunk, chunkGraph } = renderContext;
|
|
678
751
|
const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
|
|
679
752
|
chunk,
|
|
680
|
-
|
|
681
|
-
|
|
753
|
+
JAVASCRIPT_TYPE,
|
|
754
|
+
compareModulesByIdOrIdentifier(chunkGraph)
|
|
682
755
|
);
|
|
683
|
-
const allModules = modules ?
|
|
756
|
+
const allModules = modules ? [...modules] : [];
|
|
684
757
|
let strictHeader;
|
|
685
758
|
let allStrict = renderContext.strictMode;
|
|
686
759
|
if (
|
|
687
760
|
!allStrict &&
|
|
688
|
-
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
|
761
|
+
allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
|
689
762
|
) {
|
|
690
763
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
|
691
764
|
strictHeader = strictBailout
|
|
@@ -700,8 +773,15 @@ class JavascriptModulesPlugin {
|
|
|
700
773
|
strictMode: allStrict
|
|
701
774
|
};
|
|
702
775
|
const moduleSources =
|
|
703
|
-
Template.renderChunkModules(
|
|
704
|
-
|
|
776
|
+
Template.renderChunkModules(
|
|
777
|
+
chunkRenderContext,
|
|
778
|
+
allModules,
|
|
779
|
+
(module, renderInObject) =>
|
|
780
|
+
this.renderModule(
|
|
781
|
+
module,
|
|
782
|
+
{ ...chunkRenderContext, factory: true, renderInObject },
|
|
783
|
+
hooks
|
|
784
|
+
)
|
|
705
785
|
) || new RawSource("{}");
|
|
706
786
|
let source = tryRunOrWebpackError(
|
|
707
787
|
() => hooks.renderChunk.call(moduleSources, chunkRenderContext),
|
|
@@ -753,13 +833,14 @@ class JavascriptModulesPlugin {
|
|
|
753
833
|
const bootstrap = this.renderBootstrap(renderContext, hooks);
|
|
754
834
|
const useSourceMap = hooks.useSourceMap.call(chunk, renderContext);
|
|
755
835
|
|
|
756
|
-
|
|
757
|
-
|
|
836
|
+
/** @type {Module[]} */
|
|
837
|
+
const allModules = [
|
|
838
|
+
...(chunkGraph.getOrderedChunkModulesIterableBySourceType(
|
|
758
839
|
chunk,
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
) || []
|
|
762
|
-
|
|
840
|
+
JAVASCRIPT_TYPE,
|
|
841
|
+
compareModulesByIdOrIdentifier(chunkGraph)
|
|
842
|
+
) || [])
|
|
843
|
+
];
|
|
763
844
|
|
|
764
845
|
const hasEntryModules = chunkGraph.getNumberOfEntryModules(chunk) > 0;
|
|
765
846
|
/** @type {Set<Module> | undefined} */
|
|
@@ -783,7 +864,7 @@ class JavascriptModulesPlugin {
|
|
|
783
864
|
let allStrict = renderContext.strictMode;
|
|
784
865
|
if (
|
|
785
866
|
!allStrict &&
|
|
786
|
-
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
|
867
|
+
allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
|
787
868
|
) {
|
|
788
869
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
|
789
870
|
if (strictBailout) {
|
|
@@ -809,10 +890,15 @@ class JavascriptModulesPlugin {
|
|
|
809
890
|
chunkRenderContext,
|
|
810
891
|
inlinedModules
|
|
811
892
|
? allModules.filter(
|
|
812
|
-
m => !(/** @type {Set<Module>} */ (inlinedModules).has(m))
|
|
893
|
+
(m) => !(/** @type {Set<Module>} */ (inlinedModules).has(m))
|
|
813
894
|
)
|
|
814
895
|
: allModules,
|
|
815
|
-
|
|
896
|
+
(module, renderInObject) =>
|
|
897
|
+
this.renderModule(
|
|
898
|
+
module,
|
|
899
|
+
{ ...chunkRenderContext, factory: true, renderInObject },
|
|
900
|
+
hooks
|
|
901
|
+
),
|
|
816
902
|
prefix
|
|
817
903
|
);
|
|
818
904
|
if (
|
|
@@ -884,8 +970,11 @@ class JavascriptModulesPlugin {
|
|
|
884
970
|
const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
|
|
885
971
|
/** @type {Map<Module, Source> | false} */
|
|
886
972
|
let renamedInlinedModule = false;
|
|
973
|
+
let inlinedInIIFE = false;
|
|
974
|
+
|
|
887
975
|
if (avoidEntryIife) {
|
|
888
|
-
renamedInlinedModule = this.
|
|
976
|
+
renamedInlinedModule = this._getRenamedInlineModule(
|
|
977
|
+
compilation,
|
|
889
978
|
allModules,
|
|
890
979
|
renderContext,
|
|
891
980
|
inlinedModules,
|
|
@@ -897,31 +986,46 @@ class JavascriptModulesPlugin {
|
|
|
897
986
|
}
|
|
898
987
|
|
|
899
988
|
for (const m of inlinedModules) {
|
|
989
|
+
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
|
990
|
+
m,
|
|
991
|
+
chunk.runtime
|
|
992
|
+
);
|
|
993
|
+
const exports = runtimeRequirements.has(RuntimeGlobals.exports);
|
|
994
|
+
const webpackExports =
|
|
995
|
+
exports && m.exportsArgument === RuntimeGlobals.exports;
|
|
996
|
+
|
|
997
|
+
const innerStrict =
|
|
998
|
+
!allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
|
|
999
|
+
|
|
1000
|
+
const iife = innerStrict
|
|
1001
|
+
? "it needs to be in strict mode."
|
|
1002
|
+
: inlinedModules.size > 1
|
|
1003
|
+
? // TODO check globals and top-level declarations of other entries and chunk modules
|
|
1004
|
+
// to make a better decision
|
|
1005
|
+
"it needs to be isolated against other entry modules."
|
|
1006
|
+
: chunkModules && !renamedInlinedModule
|
|
1007
|
+
? "it needs to be isolated against other modules in the chunk."
|
|
1008
|
+
: exports && !webpackExports
|
|
1009
|
+
? `it uses a non-standard name for the exports (${m.exportsArgument}).`
|
|
1010
|
+
: hooks.embedInRuntimeBailout.call(m, renderContext);
|
|
1011
|
+
|
|
1012
|
+
if (iife) {
|
|
1013
|
+
inlinedInIIFE = true;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
900
1016
|
const renderedModule = renamedInlinedModule
|
|
901
1017
|
? renamedInlinedModule.get(m)
|
|
902
|
-
: this.renderModule(
|
|
1018
|
+
: this.renderModule(
|
|
1019
|
+
m,
|
|
1020
|
+
{
|
|
1021
|
+
...chunkRenderContext,
|
|
1022
|
+
factory: false,
|
|
1023
|
+
inlinedInIIFE
|
|
1024
|
+
},
|
|
1025
|
+
hooks
|
|
1026
|
+
);
|
|
903
1027
|
|
|
904
1028
|
if (renderedModule) {
|
|
905
|
-
const innerStrict =
|
|
906
|
-
!allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
|
|
907
|
-
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
|
908
|
-
m,
|
|
909
|
-
chunk.runtime
|
|
910
|
-
);
|
|
911
|
-
const exports = runtimeRequirements.has(RuntimeGlobals.exports);
|
|
912
|
-
const webpackExports =
|
|
913
|
-
exports && m.exportsArgument === RuntimeGlobals.exports;
|
|
914
|
-
const iife = innerStrict
|
|
915
|
-
? "it needs to be in strict mode."
|
|
916
|
-
: inlinedModules.size > 1
|
|
917
|
-
? // TODO check globals and top-level declarations of other entries and chunk modules
|
|
918
|
-
// to make a better decision
|
|
919
|
-
"it needs to be isolated against other entry modules."
|
|
920
|
-
: chunkModules && !renamedInlinedModule
|
|
921
|
-
? "it needs to be isolated against other modules in the chunk."
|
|
922
|
-
: exports && !webpackExports
|
|
923
|
-
? `it uses a non-standard name for the exports (${m.exportsArgument}).`
|
|
924
|
-
: hooks.embedInRuntimeBailout.call(m, renderContext);
|
|
925
1029
|
let footer;
|
|
926
1030
|
if (iife !== undefined) {
|
|
927
1031
|
startupSource.add(
|
|
@@ -940,12 +1044,13 @@ class JavascriptModulesPlugin {
|
|
|
940
1044
|
footer = "\n";
|
|
941
1045
|
}
|
|
942
1046
|
if (exports) {
|
|
943
|
-
if (m !== lastInlinedModule)
|
|
1047
|
+
if (m !== lastInlinedModule) {
|
|
944
1048
|
startupSource.add(`var ${m.exportsArgument} = {};\n`);
|
|
945
|
-
else if (m.exportsArgument !== RuntimeGlobals.exports)
|
|
1049
|
+
} else if (m.exportsArgument !== RuntimeGlobals.exports) {
|
|
946
1050
|
startupSource.add(
|
|
947
1051
|
`var ${m.exportsArgument} = ${RuntimeGlobals.exports};\n`
|
|
948
1052
|
);
|
|
1053
|
+
}
|
|
949
1054
|
}
|
|
950
1055
|
startupSource.add(renderedModule);
|
|
951
1056
|
startupSource.add(footer);
|
|
@@ -959,7 +1064,8 @@ class JavascriptModulesPlugin {
|
|
|
959
1064
|
source.add(
|
|
960
1065
|
hooks.renderStartup.call(startupSource, lastInlinedModule, {
|
|
961
1066
|
...renderContext,
|
|
962
|
-
inlined: true
|
|
1067
|
+
inlined: true,
|
|
1068
|
+
inlinedInIIFE
|
|
963
1069
|
})
|
|
964
1070
|
);
|
|
965
1071
|
if (bootstrap.afterStartup.length > 0) {
|
|
@@ -977,11 +1083,11 @@ class JavascriptModulesPlugin {
|
|
|
977
1083
|
const lastEntryModule =
|
|
978
1084
|
/** @type {Module} */
|
|
979
1085
|
(last(chunkGraph.getChunkEntryModulesIterable(chunk)));
|
|
980
|
-
/** @type {
|
|
1086
|
+
/** @type {(content: string[], name: string) => Source} */
|
|
981
1087
|
const toSource = useSourceMap
|
|
982
1088
|
? (content, name) =>
|
|
983
1089
|
new OriginalSource(Template.asString(content), name)
|
|
984
|
-
: content => new RawSource(Template.asString(content));
|
|
1090
|
+
: (content) => new RawSource(Template.asString(content));
|
|
985
1091
|
source.add(
|
|
986
1092
|
new PrefixSource(
|
|
987
1093
|
prefix,
|
|
@@ -989,7 +1095,7 @@ class JavascriptModulesPlugin {
|
|
|
989
1095
|
toSource(bootstrap.beforeStartup, "webpack/before-startup"),
|
|
990
1096
|
"\n",
|
|
991
1097
|
hooks.renderStartup.call(
|
|
992
|
-
toSource(bootstrap.startup
|
|
1098
|
+
toSource([...bootstrap.startup, ""], "webpack/startup"),
|
|
993
1099
|
lastEntryModule,
|
|
994
1100
|
{
|
|
995
1101
|
...renderContext,
|
|
@@ -1138,6 +1244,16 @@ class JavascriptModulesPlugin {
|
|
|
1138
1244
|
buf.push("");
|
|
1139
1245
|
}
|
|
1140
1246
|
|
|
1247
|
+
if (runtimeRequirements.has(RuntimeGlobals.makeDeferredNamespaceObject)) {
|
|
1248
|
+
// in order to optimize of DeferredNamespaceObject, we remove all proxy handlers after the module initialize
|
|
1249
|
+
// (see MakeDeferredNamespaceObjectRuntimeModule)
|
|
1250
|
+
// This requires all deferred imports to a module can get the module export object before the module
|
|
1251
|
+
// is evaluated.
|
|
1252
|
+
buf.push("// The deferred module cache");
|
|
1253
|
+
buf.push("var __webpack_module_deferred_exports__ = {};");
|
|
1254
|
+
buf.push("");
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1141
1257
|
if (useRequire) {
|
|
1142
1258
|
buf.push("// The require function");
|
|
1143
1259
|
buf.push(`function ${RuntimeGlobals.require}(moduleId) {`);
|
|
@@ -1183,13 +1299,15 @@ class JavascriptModulesPlugin {
|
|
|
1183
1299
|
entryModule,
|
|
1184
1300
|
entrypoint
|
|
1185
1301
|
] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
|
|
1186
|
-
if (
|
|
1302
|
+
if (
|
|
1303
|
+
!chunkGraph.getModuleSourceTypes(entryModule).has(JAVASCRIPT_TYPE)
|
|
1304
|
+
) {
|
|
1187
1305
|
i--;
|
|
1188
1306
|
continue;
|
|
1189
1307
|
}
|
|
1190
1308
|
const chunks =
|
|
1191
1309
|
/** @type {Entrypoint} */
|
|
1192
|
-
(entrypoint).chunks.filter(c => c !== chunk);
|
|
1310
|
+
(entrypoint).chunks.filter((c) => c !== chunk);
|
|
1193
1311
|
if (result.allowInlineStartup && chunks.length > 0) {
|
|
1194
1312
|
buf2.push(
|
|
1195
1313
|
"// This entry module depends on other loaded chunks and execution need to be delayed"
|
|
@@ -1202,10 +1320,10 @@ class JavascriptModulesPlugin {
|
|
|
1202
1320
|
moduleGraph.getIncomingConnectionsByOriginModule(entryModule),
|
|
1203
1321
|
([originModule, connections]) =>
|
|
1204
1322
|
originModule &&
|
|
1205
|
-
connections.some(c => c.isTargetActive(chunk.runtime)) &&
|
|
1323
|
+
connections.some((c) => c.isTargetActive(chunk.runtime)) &&
|
|
1206
1324
|
someInIterable(
|
|
1207
1325
|
chunkGraph.getModuleRuntimes(originModule),
|
|
1208
|
-
runtime =>
|
|
1326
|
+
(runtime) =>
|
|
1209
1327
|
intersectRuntime(runtime, chunk.runtime) !== undefined
|
|
1210
1328
|
)
|
|
1211
1329
|
)
|
|
@@ -1264,12 +1382,22 @@ class JavascriptModulesPlugin {
|
|
|
1264
1382
|
"// This entry module used 'module' so it can't be inlined"
|
|
1265
1383
|
);
|
|
1266
1384
|
}
|
|
1385
|
+
if (
|
|
1386
|
+
result.allowInlineStartup &&
|
|
1387
|
+
entryRuntimeRequirements.has(RuntimeGlobals.thisAsExports)
|
|
1388
|
+
) {
|
|
1389
|
+
buf2.push(
|
|
1390
|
+
"// This entry module used `this` as exports so it can't be inlined"
|
|
1391
|
+
);
|
|
1392
|
+
result.allowInlineStartup = false;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1267
1395
|
if (chunks.length > 0) {
|
|
1268
1396
|
buf2.push(
|
|
1269
1397
|
`${i === 0 ? `var ${RuntimeGlobals.exports} = ` : ""}${
|
|
1270
1398
|
RuntimeGlobals.onChunksLoaded
|
|
1271
1399
|
}(undefined, ${JSON.stringify(
|
|
1272
|
-
chunks.map(c => c.id)
|
|
1400
|
+
chunks.map((c) => c.id)
|
|
1273
1401
|
)}, ${runtimeTemplate.returningFunction(
|
|
1274
1402
|
`${RuntimeGlobals.require}(${moduleIdExpr})`
|
|
1275
1403
|
)})`
|
|
@@ -1282,21 +1410,33 @@ class JavascriptModulesPlugin {
|
|
|
1282
1410
|
);
|
|
1283
1411
|
} else {
|
|
1284
1412
|
if (i === 0) buf2.push(`var ${RuntimeGlobals.exports} = {};`);
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
);
|
|
1297
|
-
|
|
1298
|
-
|
|
1413
|
+
const needThisAsExports = entryRuntimeRequirements.has(
|
|
1414
|
+
RuntimeGlobals.thisAsExports
|
|
1415
|
+
);
|
|
1416
|
+
|
|
1417
|
+
/** @type {string[]} */
|
|
1418
|
+
const args = [];
|
|
1419
|
+
if (
|
|
1420
|
+
requireScopeUsed ||
|
|
1421
|
+
entryRuntimeRequirements.has(RuntimeGlobals.exports)
|
|
1422
|
+
) {
|
|
1423
|
+
const exportsArg = i === 0 ? RuntimeGlobals.exports : "{}";
|
|
1424
|
+
args.push("0", exportsArg);
|
|
1425
|
+
if (requireScopeUsed) {
|
|
1426
|
+
args.push(RuntimeGlobals.require);
|
|
1427
|
+
}
|
|
1299
1428
|
}
|
|
1429
|
+
buf2.push(
|
|
1430
|
+
Template.asString(
|
|
1431
|
+
(() => {
|
|
1432
|
+
if (needThisAsExports) {
|
|
1433
|
+
const comma = args.length ? "," : "";
|
|
1434
|
+
return `__webpack_modules__[${moduleIdExpr}].call(${RuntimeGlobals.exports}${comma}${args.join(",")});`;
|
|
1435
|
+
}
|
|
1436
|
+
return `__webpack_modules__[${moduleIdExpr}](${args.join(",")});`;
|
|
1437
|
+
})()
|
|
1438
|
+
)
|
|
1439
|
+
);
|
|
1300
1440
|
}
|
|
1301
1441
|
}
|
|
1302
1442
|
if (runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)) {
|
|
@@ -1407,6 +1547,9 @@ class JavascriptModulesPlugin {
|
|
|
1407
1547
|
const needModuleLoaded = runtimeRequirements.has(
|
|
1408
1548
|
RuntimeGlobals.moduleLoaded
|
|
1409
1549
|
);
|
|
1550
|
+
const needModuleDefer = runtimeRequirements.has(
|
|
1551
|
+
RuntimeGlobals.makeDeferredNamespaceObject
|
|
1552
|
+
);
|
|
1410
1553
|
const content = Template.asString([
|
|
1411
1554
|
"// Check if module is in cache",
|
|
1412
1555
|
"var cachedModule = __webpack_module_cache__[moduleId];",
|
|
@@ -1418,12 +1561,27 @@ class JavascriptModulesPlugin {
|
|
|
1418
1561
|
])
|
|
1419
1562
|
: Template.indent("return cachedModule.exports;"),
|
|
1420
1563
|
"}",
|
|
1564
|
+
// Add helpful error message in development mode when module is not found
|
|
1565
|
+
...(outputOptions.pathinfo
|
|
1566
|
+
? [
|
|
1567
|
+
"// Check if module exists (development only)",
|
|
1568
|
+
"if (__webpack_modules__[moduleId] === undefined) {",
|
|
1569
|
+
Template.indent([
|
|
1570
|
+
'var e = new Error("Cannot find module \'" + moduleId + "\'");',
|
|
1571
|
+
"e.code = 'MODULE_NOT_FOUND';",
|
|
1572
|
+
"throw e;"
|
|
1573
|
+
]),
|
|
1574
|
+
"}"
|
|
1575
|
+
]
|
|
1576
|
+
: []),
|
|
1421
1577
|
"// Create a new module (and put it into the cache)",
|
|
1422
1578
|
"var module = __webpack_module_cache__[moduleId] = {",
|
|
1423
1579
|
Template.indent([
|
|
1424
1580
|
needModuleId ? "id: moduleId," : "// no module.id needed",
|
|
1425
1581
|
needModuleLoaded ? "loaded: false," : "// no module.loaded needed",
|
|
1426
|
-
|
|
1582
|
+
needModuleDefer
|
|
1583
|
+
? "exports: __webpack_module_deferred_exports__[moduleId] || {}"
|
|
1584
|
+
: "exports: {}"
|
|
1427
1585
|
]),
|
|
1428
1586
|
"};",
|
|
1429
1587
|
"",
|
|
@@ -1432,7 +1590,13 @@ class JavascriptModulesPlugin {
|
|
|
1432
1590
|
"// Execute the module function",
|
|
1433
1591
|
"var threw = true;",
|
|
1434
1592
|
"try {",
|
|
1435
|
-
Template.indent([
|
|
1593
|
+
Template.indent([
|
|
1594
|
+
moduleExecution,
|
|
1595
|
+
"threw = false;",
|
|
1596
|
+
...(needModuleDefer
|
|
1597
|
+
? ["delete __webpack_module_deferred_exports__[moduleId];"]
|
|
1598
|
+
: [])
|
|
1599
|
+
]),
|
|
1436
1600
|
"} finally {",
|
|
1437
1601
|
Template.indent([
|
|
1438
1602
|
"if(threw) delete __webpack_module_cache__[moduleId];"
|
|
@@ -1443,14 +1607,24 @@ class JavascriptModulesPlugin {
|
|
|
1443
1607
|
? Template.asString([
|
|
1444
1608
|
"// Execute the module function",
|
|
1445
1609
|
"try {",
|
|
1446
|
-
Template.indent(
|
|
1610
|
+
Template.indent(
|
|
1611
|
+
needModuleDefer
|
|
1612
|
+
? [
|
|
1613
|
+
moduleExecution,
|
|
1614
|
+
"delete __webpack_module_deferred_exports__[moduleId];"
|
|
1615
|
+
]
|
|
1616
|
+
: moduleExecution
|
|
1617
|
+
),
|
|
1447
1618
|
"} catch(e) {",
|
|
1448
1619
|
Template.indent(["module.error = e;", "throw e;"]),
|
|
1449
1620
|
"}"
|
|
1450
1621
|
])
|
|
1451
1622
|
: Template.asString([
|
|
1452
1623
|
"// Execute the module function",
|
|
1453
|
-
moduleExecution
|
|
1624
|
+
moduleExecution,
|
|
1625
|
+
...(needModuleDefer
|
|
1626
|
+
? ["delete __webpack_module_deferred_exports__[moduleId];"]
|
|
1627
|
+
: [])
|
|
1454
1628
|
]),
|
|
1455
1629
|
needModuleLoaded
|
|
1456
1630
|
? Template.asString([
|
|
@@ -1470,6 +1644,7 @@ class JavascriptModulesPlugin {
|
|
|
1470
1644
|
}
|
|
1471
1645
|
|
|
1472
1646
|
/**
|
|
1647
|
+
* @param {Compilation} compilation compilation
|
|
1473
1648
|
* @param {Module[]} allModules allModules
|
|
1474
1649
|
* @param {MainRenderContext} renderContext renderContext
|
|
1475
1650
|
* @param {Set<Module>} inlinedModules inlinedModules
|
|
@@ -1479,7 +1654,8 @@ class JavascriptModulesPlugin {
|
|
|
1479
1654
|
* @param {boolean} hasChunkModules hasChunkModules
|
|
1480
1655
|
* @returns {Map<Module, Source> | false} renamed inlined modules
|
|
1481
1656
|
*/
|
|
1482
|
-
|
|
1657
|
+
_getRenamedInlineModule(
|
|
1658
|
+
compilation,
|
|
1483
1659
|
allModules,
|
|
1484
1660
|
renderContext,
|
|
1485
1661
|
inlinedModules,
|
|
@@ -1490,10 +1666,9 @@ class JavascriptModulesPlugin {
|
|
|
1490
1666
|
) {
|
|
1491
1667
|
const innerStrict =
|
|
1492
1668
|
!allStrict &&
|
|
1493
|
-
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict);
|
|
1669
|
+
allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
|
|
1494
1670
|
const isMultipleEntries = inlinedModules.size > 1;
|
|
1495
1671
|
const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
|
|
1496
|
-
|
|
1497
1672
|
// TODO:
|
|
1498
1673
|
// This step is before the IIFE reason calculation. Ideally, it should only be executed when this function can optimize the
|
|
1499
1674
|
// IIFE reason. Otherwise, it should directly return false. There are four reasons now, we have skipped two already, the left
|
|
@@ -1506,27 +1681,35 @@ class JavascriptModulesPlugin {
|
|
|
1506
1681
|
const renamedInlinedModules = new Map();
|
|
1507
1682
|
const { runtimeTemplate } = renderContext;
|
|
1508
1683
|
|
|
1509
|
-
/** @typedef {{ source: Source, module: Module, ast:
|
|
1684
|
+
/** @typedef {{ source: Source, module: Module, ast: Program, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
|
|
1510
1685
|
/** @type {Map<Module, Info>} */
|
|
1511
1686
|
const inlinedModulesToInfo = new Map();
|
|
1512
1687
|
/** @type {Set<string>} */
|
|
1513
1688
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
|
1514
|
-
/** @type {Map<Module, Source>} */
|
|
1515
1689
|
|
|
1516
1690
|
for (const m of allModules) {
|
|
1517
1691
|
const isInlinedModule = inlinedModules && inlinedModules.has(m);
|
|
1518
1692
|
const moduleSource = this.renderModule(
|
|
1519
1693
|
m,
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1694
|
+
{
|
|
1695
|
+
...chunkRenderContext,
|
|
1696
|
+
factory: !isInlinedModule,
|
|
1697
|
+
inlinedInIIFE: false
|
|
1698
|
+
},
|
|
1699
|
+
hooks
|
|
1523
1700
|
);
|
|
1524
1701
|
|
|
1525
1702
|
if (!moduleSource) continue;
|
|
1526
1703
|
const code = /** @type {string} */ (moduleSource.source());
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1704
|
+
|
|
1705
|
+
const { ast } = JavascriptParser._parse(
|
|
1706
|
+
code,
|
|
1707
|
+
{
|
|
1708
|
+
sourceType: "auto",
|
|
1709
|
+
ranges: true
|
|
1710
|
+
},
|
|
1711
|
+
JavascriptParser._getModuleParseFunction(compilation, m)
|
|
1712
|
+
);
|
|
1530
1713
|
|
|
1531
1714
|
const scopeManager = eslintScope.analyze(ast, {
|
|
1532
1715
|
ecmaVersion: 6,
|
|
@@ -1575,7 +1758,7 @@ class JavascriptModulesPlugin {
|
|
|
1575
1758
|
|
|
1576
1759
|
const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
|
|
1577
1760
|
const allUsedNames = new Set(
|
|
1578
|
-
Array.from(info.through, v => v.identifier.name)
|
|
1761
|
+
Array.from(info.through, (v) => v.identifier.name)
|
|
1579
1762
|
);
|
|
1580
1763
|
|
|
1581
1764
|
for (const variable of usedInNonInlined) {
|
|
@@ -1583,12 +1766,6 @@ class JavascriptModulesPlugin {
|
|
|
1583
1766
|
}
|
|
1584
1767
|
|
|
1585
1768
|
for (const variable of info.variables) {
|
|
1586
|
-
allUsedNames.add(variable.name);
|
|
1587
|
-
const references = getAllReferences(variable);
|
|
1588
|
-
const allIdentifiers = new Set(
|
|
1589
|
-
references.map(r => r.identifier).concat(variable.identifiers)
|
|
1590
|
-
);
|
|
1591
|
-
|
|
1592
1769
|
const usedNamesInScopeInfo = new Map();
|
|
1593
1770
|
const ignoredScopes = new Set();
|
|
1594
1771
|
|
|
@@ -1601,6 +1778,10 @@ class JavascriptModulesPlugin {
|
|
|
1601
1778
|
|
|
1602
1779
|
if (allUsedNames.has(name) || usedNames.has(name)) {
|
|
1603
1780
|
const references = getAllReferences(variable);
|
|
1781
|
+
const allIdentifiers = new Set([
|
|
1782
|
+
...references.map((r) => r.identifier),
|
|
1783
|
+
...variable.identifiers
|
|
1784
|
+
]);
|
|
1604
1785
|
for (const ref of references) {
|
|
1605
1786
|
addScopeSymbols(
|
|
1606
1787
|
ref.from,
|
|
@@ -1635,9 +1816,8 @@ class JavascriptModulesPlugin {
|
|
|
1635
1816
|
}
|
|
1636
1817
|
source.replace(r[0], r[1] - 1, newName);
|
|
1637
1818
|
}
|
|
1638
|
-
} else {
|
|
1639
|
-
allUsedNames.add(name);
|
|
1640
1819
|
}
|
|
1820
|
+
allUsedNames.add(name);
|
|
1641
1821
|
}
|
|
1642
1822
|
|
|
1643
1823
|
renamedInlinedModules.set(m, source);
|