webpack 5.93.0 → 5.95.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 +8 -5
- package/bin/webpack.js +6 -7
- package/hot/log.js +1 -2
- package/hot/only-dev-server.js +1 -1
- package/hot/poll.js +1 -1
- package/hot/signal.js +1 -1
- package/lib/APIPlugin.js +4 -3
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +12 -6
- package/lib/Cache.js +8 -10
- package/lib/CacheFacade.js +3 -3
- package/lib/CaseSensitiveModulesWarning.js +5 -7
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +58 -36
- package/lib/ChunkGroup.js +2 -3
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +10 -11
- package/lib/CodeGenerationResults.js +6 -5
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/Compilation.js +223 -191
- package/lib/Compiler.js +81 -82
- package/lib/ConcatenationScope.js +3 -6
- package/lib/ConditionalInitFragment.js +6 -7
- package/lib/ConstPlugin.js +7 -15
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +33 -20
- package/lib/ContextModuleFactory.js +89 -44
- package/lib/ContextReplacementPlugin.js +10 -9
- package/lib/DefinePlugin.js +75 -68
- package/lib/DelegatedModule.js +7 -3
- package/lib/DelegatedModuleFactoryPlugin.js +36 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +0 -1
- package/lib/Dependency.js +10 -14
- package/lib/DllEntryPlugin.js +4 -2
- package/lib/DllModuleFactory.js +1 -0
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +30 -15
- package/lib/EntryPlugin.js +1 -3
- package/lib/EnvironmentPlugin.js +6 -2
- package/lib/ErrorHelpers.js +11 -12
- package/lib/EvalDevToolModulePlugin.js +10 -12
- package/lib/EvalSourceMapDevToolPlugin.js +15 -13
- package/lib/ExportsInfo.js +185 -120
- package/lib/ExternalModule.js +41 -15
- package/lib/ExternalModuleFactoryPlugin.js +23 -10
- package/lib/FileSystemInfo.js +791 -422
- package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
- package/lib/FlagDependencyExportsPlugin.js +12 -11
- package/lib/FlagDependencyUsagePlugin.js +1 -1
- package/lib/Generator.js +2 -5
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +8 -10
- package/lib/HotModuleReplacementPlugin.js +78 -64
- package/lib/IgnoreErrorModuleFactory.js +3 -3
- package/lib/IgnorePlugin.js +1 -3
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +2 -3
- package/lib/LibManifestPlugin.js +4 -3
- package/lib/MainTemplate.js +72 -19
- package/lib/Module.js +25 -9
- package/lib/ModuleBuildError.js +4 -11
- package/lib/ModuleDependencyError.js +5 -5
- package/lib/ModuleDependencyWarning.js +5 -5
- package/lib/ModuleError.js +1 -5
- package/lib/ModuleFilenameHelpers.js +29 -46
- package/lib/ModuleGraph.js +7 -6
- package/lib/ModuleGraphConnection.js +6 -6
- package/lib/ModuleInfoHeaderPlugin.js +82 -30
- package/lib/ModuleParseError.js +8 -9
- package/lib/ModuleRestoreError.js +1 -1
- package/lib/ModuleStoreError.js +1 -1
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +21 -22
- package/lib/ModuleWarning.js +1 -5
- package/lib/MultiCompiler.js +24 -26
- package/lib/MultiStats.js +73 -31
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +130 -69
- package/lib/NormalModuleFactory.js +53 -49
- package/lib/OptimizationStages.js +3 -3
- package/lib/ProgressPlugin.js +9 -9
- package/lib/ProvidePlugin.js +4 -4
- package/lib/RuntimeGlobals.js +71 -70
- package/lib/RuntimeModule.js +1 -1
- package/lib/RuntimePlugin.js +24 -12
- package/lib/RuntimeTemplate.js +40 -44
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolPlugin.js +42 -34
- package/lib/Stats.js +5 -11
- package/lib/Template.js +18 -24
- package/lib/TemplatedPathPlugin.js +21 -13
- package/lib/WarnDeprecatedOptionPlugin.js +0 -1
- package/lib/WatchIgnorePlugin.js +26 -9
- package/lib/Watching.js +10 -5
- package/lib/WebpackOptionsApply.js +84 -62
- package/lib/asset/AssetGenerator.js +107 -42
- package/lib/asset/AssetModulesPlugin.js +29 -23
- package/lib/asset/AssetSourceGenerator.js +2 -7
- package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
- package/lib/buildChunkGraph.js +93 -81
- package/lib/cache/IdleFileCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
- package/lib/cache/PackFileCacheStrategy.js +51 -50
- package/lib/cache/ResolverCachePlugin.js +6 -6
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +148 -104
- package/lib/config/browserslistTargetHandler.js +16 -13
- package/lib/config/defaults.js +32 -28
- package/lib/config/normalization.js +335 -344
- package/lib/config/target.js +42 -52
- package/lib/container/ContainerEntryModule.js +2 -2
- package/lib/container/ContainerPlugin.js +1 -1
- package/lib/container/RemoteRuntimeModule.js +11 -8
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +26 -24
- package/lib/css/CssGenerator.js +9 -4
- package/lib/css/CssLoadingRuntimeModule.js +10 -10
- package/lib/css/CssModulesPlugin.js +127 -47
- package/lib/css/CssParser.js +20 -18
- package/lib/css/walkCssTokens.js +80 -95
- package/lib/debug/ProfilingPlugin.js +19 -20
- package/lib/dependencies/AMDDefineDependency.js +1 -1
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
- package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
- package/lib/dependencies/CommonJsExportsDependency.js +0 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
- package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
- package/lib/dependencies/ConstDependency.js +1 -1
- package/lib/dependencies/ContextDependency.js +7 -2
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +35 -8
- package/lib/dependencies/CriticalDependencyWarning.js +1 -1
- package/lib/dependencies/CssExportDependency.js +7 -7
- package/lib/dependencies/CssImportDependency.js +0 -2
- package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
- package/lib/dependencies/CssUrlDependency.js +4 -5
- package/lib/dependencies/DynamicExports.js +5 -5
- package/lib/dependencies/ExportsInfoDependency.js +1 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
- package/lib/dependencies/HarmonyExports.js +2 -2
- package/lib/dependencies/HarmonyImportDependency.js +2 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
- package/lib/dependencies/ImportDependency.js +1 -1
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
- package/lib/dependencies/ImportMetaPlugin.js +11 -13
- package/lib/dependencies/ImportParserPlugin.js +39 -44
- package/lib/dependencies/JsonExportsDependency.js +22 -18
- package/lib/dependencies/LoaderPlugin.js +47 -36
- package/lib/dependencies/LocalModule.js +1 -1
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
- package/lib/dependencies/ProvidedDependency.js +1 -1
- package/lib/dependencies/PureExpressionDependency.js +6 -6
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
- package/lib/dependencies/SystemPlugin.js +1 -1
- package/lib/dependencies/URLDependency.js +3 -3
- package/lib/dependencies/URLPlugin.js +66 -12
- package/lib/dependencies/WorkerPlugin.js +25 -24
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
- package/lib/hmr/LazyCompilationPlugin.js +27 -12
- package/lib/hmr/lazyCompilationBackend.js +64 -40
- package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +5 -1
- package/lib/ids/IdHelpers.js +29 -39
- package/lib/ids/SyncModuleIdsPlugin.js +7 -2
- package/lib/index.js +1 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
- package/lib/javascript/BasicEvaluatedExpression.js +4 -19
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
- package/lib/javascript/JavascriptGenerator.js +23 -7
- package/lib/javascript/JavascriptModulesPlugin.js +133 -86
- package/lib/javascript/JavascriptParser.js +179 -200
- package/lib/javascript/JavascriptParserHelpers.js +20 -21
- package/lib/javascript/StartupHelpers.js +41 -13
- package/lib/json/JsonGenerator.js +7 -13
- package/lib/json/JsonModulesPlugin.js +1 -4
- package/lib/json/JsonParser.js +5 -3
- package/lib/library/AmdLibraryPlugin.js +12 -16
- package/lib/library/AssignLibraryPlugin.js +8 -10
- package/lib/library/EnableLibraryPlugin.js +15 -14
- package/lib/library/JsonpLibraryPlugin.js +2 -1
- package/lib/library/ModernModuleLibraryPlugin.js +8 -6
- package/lib/library/ModuleLibraryPlugin.js +2 -1
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +66 -92
- package/lib/logging/Logger.js +32 -4
- package/lib/logging/createConsoleLogger.js +12 -13
- package/lib/logging/runtime.js +7 -8
- package/lib/logging/truncateArgs.js +5 -8
- package/lib/node/NodeWatchFileSystem.js +3 -18
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
- package/lib/node/nodeConsole.js +22 -22
- package/lib/optimize/AggressiveMergingPlugin.js +2 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
- package/lib/optimize/ConcatenatedModule.js +81 -51
- package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
- package/lib/optimize/InnerGraph.js +17 -17
- package/lib/optimize/InnerGraphPlugin.js +8 -7
- package/lib/optimize/LimitChunkCountPlugin.js +2 -3
- package/lib/optimize/MangleExportsPlugin.js +1 -0
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
- package/lib/optimize/MinMaxSizeWarning.js +1 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
- package/lib/optimize/RealContentHashPlugin.js +7 -10
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
- package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
- package/lib/optimize/SplitChunksPlugin.js +34 -30
- package/lib/performance/SizeLimitsPlugin.js +2 -2
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
- package/lib/rules/BasicEffectRulePlugin.js +3 -1
- package/lib/rules/BasicMatcherRulePlugin.js +3 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
- package/lib/rules/RuleSetCompiler.js +41 -22
- package/lib/rules/UseEffectRulePlugin.js +36 -32
- package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
- package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
- package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
- package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +241 -126
- package/lib/serialization/BinaryMiddleware.js +44 -28
- package/lib/serialization/DateObjectSerializer.js +1 -0
- package/lib/serialization/ErrorObjectSerializer.js +2 -0
- package/lib/serialization/FileMiddleware.js +154 -106
- package/lib/serialization/MapObjectSerializer.js +2 -1
- package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
- package/lib/serialization/ObjectMiddleware.js +52 -56
- package/lib/serialization/PlainObjectSerializer.js +32 -6
- package/lib/serialization/RegExpObjectSerializer.js +1 -0
- package/lib/serialization/Serializer.js +4 -5
- package/lib/serialization/SerializerMiddleware.js +6 -6
- package/lib/serialization/SetObjectSerializer.js +2 -1
- package/lib/sharing/ConsumeSharedPlugin.js +116 -97
- package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedPlugin.js +2 -2
- package/lib/sharing/resolveMatchedConfigs.js +2 -1
- package/lib/sharing/utils.js +15 -27
- package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
- package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
- package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
- package/lib/stats/StatsFactory.js +127 -56
- package/lib/stats/StatsPrinter.js +75 -44
- package/lib/util/ArrayHelpers.js +8 -4
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +31 -12
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +13 -0
- package/lib/util/MapHelpers.js +1 -3
- package/lib/util/ParallelismFactorCalculator.js +1 -1
- package/lib/util/Queue.js +1 -1
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +4 -3
- package/lib/util/StackedCacheMap.js +4 -6
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +0 -5
- package/lib/util/TupleQueue.js +1 -1
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +7 -7
- package/lib/util/WeakTupleMap.js +19 -21
- package/lib/util/binarySearchBounds.js +5 -12
- package/lib/util/chainedImports.js +1 -1
- package/lib/util/cleverMerge.js +21 -19
- package/lib/util/comparators.js +57 -52
- package/lib/util/compileBooleanMatcher.js +3 -6
- package/lib/util/conventions.js +8 -11
- package/lib/util/createHash.js +9 -6
- package/lib/util/deprecation.js +22 -12
- package/lib/util/deterministicGrouping.js +19 -26
- package/lib/util/findGraphRoots.js +2 -2
- package/lib/util/fs.js +32 -32
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +7 -7
- package/lib/util/hash/xxhash64.js +2 -2
- package/lib/util/identifier.js +81 -59
- package/lib/util/memoize.js +8 -10
- package/lib/util/mergeScope.js +6 -9
- package/lib/util/nonNumericOnlyHash.js +2 -2
- package/lib/util/numberHash.js +1 -6
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/propertyAccess.js +2 -5
- package/lib/util/propertyName.js +1 -3
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +109 -113
- package/lib/util/semver.js +29 -27
- package/lib/util/serialization.js +16 -1
- package/lib/util/smartGrouping.js +5 -5
- package/lib/util/source.js +1 -1
- package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
- package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
- package/package.json +18 -17
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +5 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
- package/types.d.ts +681 -355
@@ -14,6 +14,8 @@ const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibi
|
|
14
14
|
/** @typedef {import("webpack-sources").Source} Source */
|
15
15
|
/** @typedef {import("../DependenciesBlock")} DependenciesBlock */
|
16
16
|
/** @typedef {import("../Dependency")} Dependency */
|
17
|
+
/** @typedef {import("../DependencyTemplate")} DependencyTemplate */
|
18
|
+
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
17
19
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
18
20
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
19
21
|
/** @typedef {import("../Module")} Module */
|
@@ -25,8 +27,15 @@ const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibi
|
|
25
27
|
// replace with newer constructs
|
26
28
|
|
27
29
|
const deprecatedGetInitFragments = util.deprecate(
|
30
|
+
/**
|
31
|
+
* @param {DependencyTemplate} template template
|
32
|
+
* @param {Dependency} dependency dependency
|
33
|
+
* @param {DependencyTemplateContext} templateContext template context
|
34
|
+
* @returns {InitFragment<GenerateContext>[]} init fragments
|
35
|
+
*/
|
28
36
|
(template, dependency, templateContext) =>
|
29
|
-
|
37
|
+
/** @type {DependencyTemplate & { getInitFragments: function(Dependency, DependencyTemplateContext): InitFragment<GenerateContext>[] }} */
|
38
|
+
(template).getInitFragments(dependency, templateContext),
|
30
39
|
"DependencyTemplate.getInitFragment is deprecated (use apply(dep, source, { initFragments }) instead)",
|
31
40
|
"DEP_WEBPACK_JAVASCRIPT_GENERATOR_GET_INIT_FRAGMENTS"
|
32
41
|
);
|
@@ -93,6 +102,7 @@ class JavascriptGenerator extends Generator {
|
|
93
102
|
}
|
94
103
|
|
95
104
|
const source = new ReplaceSource(originalSource);
|
105
|
+
/** @type {InitFragment<GenerateContext>[]} */
|
96
106
|
const initFragments = [];
|
97
107
|
|
98
108
|
this.sourceModule(module, initFragments, source, generateContext);
|
@@ -102,7 +112,7 @@ class JavascriptGenerator extends Generator {
|
|
102
112
|
|
103
113
|
/**
|
104
114
|
* @param {Module} module the module to generate
|
105
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
115
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
106
116
|
* @param {ReplaceSource} source the current replace source which can be modified
|
107
117
|
* @param {GenerateContext} generateContext the generateContext
|
108
118
|
* @returns {void}
|
@@ -144,7 +154,7 @@ class JavascriptGenerator extends Generator {
|
|
144
154
|
/**
|
145
155
|
* @param {Module} module the module to generate
|
146
156
|
* @param {DependenciesBlock} block the dependencies block which will be processed
|
147
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
157
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
148
158
|
* @param {ReplaceSource} source the current replace source which can be modified
|
149
159
|
* @param {GenerateContext} generateContext the generateContext
|
150
160
|
* @returns {void}
|
@@ -174,7 +184,7 @@ class JavascriptGenerator extends Generator {
|
|
174
184
|
/**
|
175
185
|
* @param {Module} module the current module
|
176
186
|
* @param {Dependency} dependency the dependency to generate
|
177
|
-
* @param {InitFragment[]} initFragments mutable list of init fragments
|
187
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
178
188
|
* @param {ReplaceSource} source the current replace source which can be modified
|
179
189
|
* @param {GenerateContext} generateContext the render context
|
180
190
|
* @returns {void}
|
@@ -186,12 +196,14 @@ class JavascriptGenerator extends Generator {
|
|
186
196
|
const template = generateContext.dependencyTemplates.get(constructor);
|
187
197
|
if (!template) {
|
188
198
|
throw new Error(
|
189
|
-
|
199
|
+
`No template for dependency: ${dependency.constructor.name}`
|
190
200
|
);
|
191
201
|
}
|
192
202
|
|
203
|
+
/** @type {InitFragment<GenerateContext>[] | undefined} */
|
193
204
|
let chunkInitFragments;
|
194
205
|
|
206
|
+
/** @type {DependencyTemplateContext} */
|
195
207
|
const templateContext = {
|
196
208
|
runtimeTemplate: generateContext.runtimeTemplate,
|
197
209
|
dependencyTemplates: generateContext.dependencyTemplates,
|
@@ -201,11 +213,15 @@ class JavascriptGenerator extends Generator {
|
|
201
213
|
runtime: generateContext.runtime,
|
202
214
|
runtimeRequirements: generateContext.runtimeRequirements,
|
203
215
|
concatenationScope: generateContext.concatenationScope,
|
204
|
-
codeGenerationResults:
|
216
|
+
codeGenerationResults:
|
217
|
+
/** @type {NonNullable<GenerateContext["codeGenerationResults"]>} */
|
218
|
+
(generateContext.codeGenerationResults),
|
205
219
|
initFragments,
|
206
220
|
get chunkInitFragments() {
|
207
221
|
if (!chunkInitFragments) {
|
208
|
-
const data =
|
222
|
+
const data =
|
223
|
+
/** @type {NonNullable<GenerateContext["getData"]>} */
|
224
|
+
(generateContext.getData)();
|
209
225
|
chunkInitFragments = data.get("chunkInitFragments");
|
210
226
|
if (!chunkInitFragments) {
|
211
227
|
chunkInitFragments = [];
|
@@ -38,17 +38,23 @@ const { intersectRuntime } = require("../util/runtime");
|
|
38
38
|
const JavascriptGenerator = require("./JavascriptGenerator");
|
39
39
|
const JavascriptParser = require("./JavascriptParser");
|
40
40
|
|
41
|
+
/** @typedef {import("eslint-scope").Scope} Scope */
|
41
42
|
/** @typedef {import("eslint-scope").Variable} Variable */
|
42
43
|
/** @typedef {import("webpack-sources").Source} Source */
|
44
|
+
/** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
|
43
45
|
/** @typedef {import("../Chunk")} Chunk */
|
44
46
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
45
47
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
46
48
|
/** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
|
47
49
|
/** @typedef {import("../Compiler")} Compiler */
|
48
50
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
51
|
+
/** @typedef {import("../Entrypoint")} Entrypoint */
|
49
52
|
/** @typedef {import("../Module")} Module */
|
53
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
50
54
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
51
55
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
56
|
+
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
57
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
52
58
|
/** @typedef {import("../util/Hash")} Hash */
|
53
59
|
|
54
60
|
/**
|
@@ -59,9 +65,9 @@ const JavascriptParser = require("./JavascriptParser");
|
|
59
65
|
const chunkHasJs = (chunk, chunkGraph) => {
|
60
66
|
if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true;
|
61
67
|
|
62
|
-
return
|
63
|
-
|
64
|
-
|
68
|
+
return Boolean(
|
69
|
+
chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
|
70
|
+
);
|
65
71
|
};
|
66
72
|
|
67
73
|
/**
|
@@ -96,7 +102,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
96
102
|
* @property {ModuleGraph} moduleGraph the module graph
|
97
103
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
98
104
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
99
|
-
* @property {boolean} strictMode rendering in strict context
|
105
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
100
106
|
*/
|
101
107
|
|
102
108
|
/**
|
@@ -108,7 +114,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
108
114
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
109
115
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
110
116
|
* @property {string} hash hash to be used for render call
|
111
|
-
* @property {boolean} strictMode rendering in strict context
|
117
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
112
118
|
*/
|
113
119
|
|
114
120
|
/**
|
@@ -120,7 +126,7 @@ const printGeneratedCodeForStack = (module, code) => {
|
|
120
126
|
* @property {ChunkGraph} chunkGraph the chunk graph
|
121
127
|
* @property {CodeGenerationResults} codeGenerationResults results of code generation
|
122
128
|
* @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
|
123
|
-
* @property {boolean} strictMode rendering in strict context
|
129
|
+
* @property {boolean | undefined} strictMode rendering in strict context
|
124
130
|
*/
|
125
131
|
|
126
132
|
/**
|
@@ -158,6 +164,8 @@ const compilationHooksMap = new WeakMap();
|
|
158
164
|
|
159
165
|
const PLUGIN_NAME = "JavascriptModulesPlugin";
|
160
166
|
|
167
|
+
/** @typedef {{ header: string[], beforeStartup: string[], startup: string[], afterStartup: string[], allowInlineStartup: boolean }} Bootstrap */
|
168
|
+
|
161
169
|
class JavascriptModulesPlugin {
|
162
170
|
/**
|
163
171
|
* @param {Compilation} compilation the compilation
|
@@ -226,34 +234,22 @@ class JavascriptModulesPlugin {
|
|
226
234
|
const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
|
227
235
|
normalModuleFactory.hooks.createParser
|
228
236
|
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
229
|
-
.tap(PLUGIN_NAME, options =>
|
230
|
-
return new JavascriptParser("auto");
|
231
|
-
});
|
237
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("auto"));
|
232
238
|
normalModuleFactory.hooks.createParser
|
233
239
|
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
234
|
-
.tap(PLUGIN_NAME, options =>
|
235
|
-
return new JavascriptParser("script");
|
236
|
-
});
|
240
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("script"));
|
237
241
|
normalModuleFactory.hooks.createParser
|
238
242
|
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
239
|
-
.tap(PLUGIN_NAME, options =>
|
240
|
-
return new JavascriptParser("module");
|
241
|
-
});
|
243
|
+
.tap(PLUGIN_NAME, options => new JavascriptParser("module"));
|
242
244
|
normalModuleFactory.hooks.createGenerator
|
243
245
|
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
244
|
-
.tap(PLUGIN_NAME, () =>
|
245
|
-
return new JavascriptGenerator();
|
246
|
-
});
|
246
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
247
247
|
normalModuleFactory.hooks.createGenerator
|
248
248
|
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
249
|
-
.tap(PLUGIN_NAME, () =>
|
250
|
-
return new JavascriptGenerator();
|
251
|
-
});
|
249
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
252
250
|
normalModuleFactory.hooks.createGenerator
|
253
251
|
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
254
|
-
.tap(PLUGIN_NAME, () =>
|
255
|
-
return new JavascriptGenerator();
|
256
|
-
});
|
252
|
+
.tap(PLUGIN_NAME, () => new JavascriptGenerator());
|
257
253
|
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
258
254
|
const {
|
259
255
|
hash,
|
@@ -460,12 +456,13 @@ class JavascriptModulesPlugin {
|
|
460
456
|
moduleObject.exports,
|
461
457
|
context.__webpack_require__
|
462
458
|
);
|
463
|
-
} catch (
|
464
|
-
|
459
|
+
} catch (err) {
|
460
|
+
/** @type {Error} */
|
461
|
+
(err).stack += printGeneratedCodeForStack(
|
465
462
|
options.module,
|
466
463
|
/** @type {string} */ (code)
|
467
464
|
);
|
468
|
-
throw
|
465
|
+
throw err;
|
469
466
|
}
|
470
467
|
});
|
471
468
|
compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
|
@@ -482,26 +479,32 @@ class JavascriptModulesPlugin {
|
|
482
479
|
}
|
483
480
|
);
|
484
481
|
try {
|
482
|
+
// eslint-disable-next-line no-useless-call
|
485
483
|
fn.call(null, context.__webpack_require__);
|
486
|
-
} catch (
|
487
|
-
|
488
|
-
|
484
|
+
} catch (err) {
|
485
|
+
/** @type {Error} */
|
486
|
+
(err).stack += printGeneratedCodeForStack(options.module, code);
|
487
|
+
throw err;
|
489
488
|
}
|
490
489
|
});
|
491
490
|
}
|
492
491
|
);
|
493
492
|
}
|
494
493
|
|
494
|
+
/**
|
495
|
+
* @param {Chunk} chunk chunk
|
496
|
+
* @param {OutputOptions} outputOptions output options
|
497
|
+
* @returns {TemplatePath} used filename template
|
498
|
+
*/
|
495
499
|
static getChunkFilenameTemplate(chunk, outputOptions) {
|
496
500
|
if (chunk.filenameTemplate) {
|
497
501
|
return chunk.filenameTemplate;
|
498
502
|
} else if (chunk instanceof HotUpdateChunk) {
|
499
|
-
return outputOptions.hotUpdateChunkFilename;
|
503
|
+
return /** @type {TemplatePath} */ (outputOptions.hotUpdateChunkFilename);
|
500
504
|
} else if (chunk.canBeInitial()) {
|
501
|
-
return outputOptions.filename;
|
502
|
-
} else {
|
503
|
-
return outputOptions.chunkFilename;
|
505
|
+
return /** @type {TemplatePath} */ (outputOptions.filename);
|
504
506
|
}
|
507
|
+
return /** @type {TemplatePath} */ (outputOptions.chunkFilename);
|
505
508
|
}
|
506
509
|
|
507
510
|
/**
|
@@ -509,7 +512,7 @@ class JavascriptModulesPlugin {
|
|
509
512
|
* @param {ChunkRenderContext} renderContext options object
|
510
513
|
* @param {CompilationHooks} hooks hooks
|
511
514
|
* @param {boolean} factory true: renders as factory method, false: pure module content
|
512
|
-
* @returns {Source} the newly generated source from rendering
|
515
|
+
* @returns {Source | null} the newly generated source from rendering
|
513
516
|
*/
|
514
517
|
renderModule(module, renderContext, hooks, factory) {
|
515
518
|
const {
|
@@ -549,7 +552,9 @@ class JavascriptModulesPlugin {
|
|
549
552
|
const needThisAsExports = runtimeRequirements.has(
|
550
553
|
RuntimeGlobals.thisAsExports
|
551
554
|
);
|
552
|
-
const needStrict =
|
555
|
+
const needStrict =
|
556
|
+
/** @type {BuildInfo} */
|
557
|
+
(module.buildInfo).strict && !strictMode;
|
553
558
|
const cacheEntry = this._moduleFactoryCache.get(
|
554
559
|
moduleSourcePostContent
|
555
560
|
);
|
@@ -570,19 +575,19 @@ class JavascriptModulesPlugin {
|
|
570
575
|
args.push(
|
571
576
|
needModule
|
572
577
|
? module.moduleArgument
|
573
|
-
:
|
578
|
+
: `__unused_webpack_${module.moduleArgument}`
|
574
579
|
);
|
575
580
|
if (needExports || needRequire)
|
576
581
|
args.push(
|
577
582
|
needExports
|
578
583
|
? module.exportsArgument
|
579
|
-
:
|
584
|
+
: `__unused_webpack_${module.exportsArgument}`
|
580
585
|
);
|
581
586
|
if (needRequire) args.push(RuntimeGlobals.require);
|
582
587
|
if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
|
583
|
-
factorySource.add(
|
588
|
+
factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
|
584
589
|
} else {
|
585
|
-
factorySource.add(
|
590
|
+
factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
|
586
591
|
}
|
587
592
|
if (needStrict) {
|
588
593
|
factorySource.add('"use strict";\n');
|
@@ -615,9 +620,9 @@ class JavascriptModulesPlugin {
|
|
615
620
|
),
|
616
621
|
"JavascriptModulesPlugin.getCompilationHooks().renderModulePackage"
|
617
622
|
);
|
618
|
-
} catch (
|
619
|
-
|
620
|
-
throw
|
623
|
+
} catch (err) {
|
624
|
+
err.module = module;
|
625
|
+
throw err;
|
621
626
|
}
|
622
627
|
}
|
623
628
|
|
@@ -636,7 +641,10 @@ class JavascriptModulesPlugin {
|
|
636
641
|
const allModules = modules ? Array.from(modules) : [];
|
637
642
|
let strictHeader;
|
638
643
|
let allStrict = renderContext.strictMode;
|
639
|
-
if (
|
644
|
+
if (
|
645
|
+
!allStrict &&
|
646
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
647
|
+
) {
|
640
648
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
641
649
|
strictHeader = strictBailout
|
642
650
|
? `// runtime can't be in strict mode because ${strictBailout}.\n`
|
@@ -718,7 +726,7 @@ class JavascriptModulesPlugin {
|
|
718
726
|
inlinedModules = new Set(chunkGraph.getChunkEntryModulesIterable(chunk));
|
719
727
|
}
|
720
728
|
|
721
|
-
|
729
|
+
const source = new ConcatSource();
|
722
730
|
let prefix;
|
723
731
|
if (iife) {
|
724
732
|
if (runtimeTemplate.supportsArrowFunction()) {
|
@@ -731,16 +739,20 @@ class JavascriptModulesPlugin {
|
|
731
739
|
prefix = "/******/ ";
|
732
740
|
}
|
733
741
|
let allStrict = renderContext.strictMode;
|
734
|
-
if (
|
742
|
+
if (
|
743
|
+
!allStrict &&
|
744
|
+
allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
|
745
|
+
) {
|
735
746
|
const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
|
736
747
|
if (strictBailout) {
|
737
748
|
source.add(
|
738
|
-
|
739
|
-
|
749
|
+
`${
|
750
|
+
prefix
|
751
|
+
}// runtime can't be in strict mode because ${strictBailout}.\n`
|
740
752
|
);
|
741
753
|
} else {
|
742
754
|
allStrict = true;
|
743
|
-
source.add(prefix
|
755
|
+
source.add(`${prefix}"use strict";\n`);
|
744
756
|
}
|
745
757
|
}
|
746
758
|
|
@@ -767,7 +779,7 @@ class JavascriptModulesPlugin {
|
|
767
779
|
runtimeRequirements.has(RuntimeGlobals.moduleFactoriesAddOnly) ||
|
768
780
|
runtimeRequirements.has(RuntimeGlobals.require)
|
769
781
|
) {
|
770
|
-
source.add(prefix
|
782
|
+
source.add(`${prefix}var __webpack_modules__ = (`);
|
771
783
|
source.add(chunkModules || "{}");
|
772
784
|
source.add(");\n");
|
773
785
|
source.add(
|
@@ -776,7 +788,7 @@ class JavascriptModulesPlugin {
|
|
776
788
|
}
|
777
789
|
|
778
790
|
if (bootstrap.header.length > 0) {
|
779
|
-
const header = Template.asString(bootstrap.header)
|
791
|
+
const header = `${Template.asString(bootstrap.header)}\n`;
|
780
792
|
source.add(
|
781
793
|
new PrefixSource(
|
782
794
|
prefix,
|
@@ -810,7 +822,7 @@ class JavascriptModulesPlugin {
|
|
810
822
|
}
|
811
823
|
if (inlinedModules) {
|
812
824
|
if (bootstrap.beforeStartup.length > 0) {
|
813
|
-
const beforeStartup = Template.asString(bootstrap.beforeStartup)
|
825
|
+
const beforeStartup = `${Template.asString(bootstrap.beforeStartup)}\n`;
|
814
826
|
source.add(
|
815
827
|
new PrefixSource(
|
816
828
|
prefix,
|
@@ -820,28 +832,36 @@ class JavascriptModulesPlugin {
|
|
820
832
|
)
|
821
833
|
);
|
822
834
|
}
|
823
|
-
const lastInlinedModule = last(inlinedModules);
|
835
|
+
const lastInlinedModule = /** @type {Module} */ (last(inlinedModules));
|
824
836
|
const startupSource = new ConcatSource();
|
825
837
|
|
826
838
|
if (runtimeRequirements.has(RuntimeGlobals.exports)) {
|
827
839
|
startupSource.add(`var ${RuntimeGlobals.exports} = {};\n`);
|
828
840
|
}
|
829
841
|
|
830
|
-
const
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
|
835
|
-
|
836
|
-
|
842
|
+
const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
|
843
|
+
/** @type {Map<Module, Source> | false} */
|
844
|
+
let renamedInlinedModule = false;
|
845
|
+
if (avoidEntryIife) {
|
846
|
+
renamedInlinedModule = this.getRenamedInlineModule(
|
847
|
+
allModules,
|
848
|
+
renderContext,
|
849
|
+
inlinedModules,
|
850
|
+
chunkRenderContext,
|
851
|
+
hooks,
|
852
|
+
allStrict,
|
853
|
+
Boolean(chunkModules)
|
854
|
+
);
|
855
|
+
}
|
837
856
|
|
838
857
|
for (const m of inlinedModules) {
|
839
|
-
const renderedModule =
|
840
|
-
renamedInlinedModule.get(m)
|
841
|
-
this.renderModule(m, chunkRenderContext, hooks, false);
|
858
|
+
const renderedModule = renamedInlinedModule
|
859
|
+
? renamedInlinedModule.get(m)
|
860
|
+
: this.renderModule(m, chunkRenderContext, hooks, false);
|
842
861
|
|
843
862
|
if (renderedModule) {
|
844
|
-
const innerStrict =
|
863
|
+
const innerStrict =
|
864
|
+
!allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
|
845
865
|
const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
|
846
866
|
m,
|
847
867
|
chunk.runtime
|
@@ -849,15 +869,17 @@ class JavascriptModulesPlugin {
|
|
849
869
|
const exports = runtimeRequirements.has(RuntimeGlobals.exports);
|
850
870
|
const webpackExports =
|
851
871
|
exports && m.exportsArgument === RuntimeGlobals.exports;
|
852
|
-
|
872
|
+
const iife = innerStrict
|
853
873
|
? "it need to be in strict mode."
|
854
874
|
: inlinedModules.size > 1
|
855
875
|
? // TODO check globals and top-level declarations of other entries and chunk modules
|
856
876
|
// to make a better decision
|
857
877
|
"it need to be isolated against other entry modules."
|
858
|
-
:
|
859
|
-
?
|
860
|
-
:
|
878
|
+
: chunkModules && !renamedInlinedModule
|
879
|
+
? "it need to be isolated against other modules in the chunk."
|
880
|
+
: exports && !webpackExports
|
881
|
+
? `it uses a non-standard name for the exports (${m.exportsArgument}).`
|
882
|
+
: hooks.embedInRuntimeBailout.call(m, renderContext);
|
861
883
|
let footer;
|
862
884
|
if (iife !== undefined) {
|
863
885
|
startupSource.add(
|
@@ -899,7 +921,7 @@ class JavascriptModulesPlugin {
|
|
899
921
|
})
|
900
922
|
);
|
901
923
|
if (bootstrap.afterStartup.length > 0) {
|
902
|
-
const afterStartup = Template.asString(bootstrap.afterStartup)
|
924
|
+
const afterStartup = `${Template.asString(bootstrap.afterStartup)}\n`;
|
903
925
|
source.add(
|
904
926
|
new PrefixSource(
|
905
927
|
prefix,
|
@@ -910,9 +932,10 @@ class JavascriptModulesPlugin {
|
|
910
932
|
);
|
911
933
|
}
|
912
934
|
} else {
|
913
|
-
const lastEntryModule =
|
914
|
-
|
915
|
-
|
935
|
+
const lastEntryModule =
|
936
|
+
/** @type {Module} */
|
937
|
+
(last(chunkGraph.getChunkEntryModulesIterable(chunk)));
|
938
|
+
/** @type {function(string[], string): Source} */
|
916
939
|
const toSource = useSourceMap
|
917
940
|
? (content, name) =>
|
918
941
|
new OriginalSource(Template.asString(content), name)
|
@@ -992,7 +1015,8 @@ class JavascriptModulesPlugin {
|
|
992
1015
|
*/
|
993
1016
|
updateHashWithBootstrap(hash, renderContext, hooks) {
|
994
1017
|
const bootstrap = this.renderBootstrap(renderContext, hooks);
|
995
|
-
for (const
|
1018
|
+
for (const _k of Object.keys(bootstrap)) {
|
1019
|
+
const key = /** @type {keyof Bootstrap} */ (_k);
|
996
1020
|
hash.update(key);
|
997
1021
|
if (Array.isArray(bootstrap[key])) {
|
998
1022
|
for (const line of bootstrap[key]) {
|
@@ -1007,7 +1031,7 @@ class JavascriptModulesPlugin {
|
|
1007
1031
|
/**
|
1008
1032
|
* @param {RenderBootstrapContext} renderContext options object
|
1009
1033
|
* @param {CompilationHooks} hooks hooks
|
1010
|
-
* @returns {
|
1034
|
+
* @returns {Bootstrap} the generated source of the bootstrap code
|
1011
1035
|
*/
|
1012
1036
|
renderBootstrap(renderContext, hooks) {
|
1013
1037
|
const {
|
@@ -1047,7 +1071,7 @@ class JavascriptModulesPlugin {
|
|
1047
1071
|
allowInlineStartup: true
|
1048
1072
|
};
|
1049
1073
|
|
1050
|
-
|
1074
|
+
const { header: buf, startup, beforeStartup, afterStartup } = result;
|
1051
1075
|
|
1052
1076
|
if (result.allowInlineStartup && moduleFactories) {
|
1053
1077
|
startup.push(
|
@@ -1117,7 +1141,9 @@ class JavascriptModulesPlugin {
|
|
1117
1141
|
entryModule,
|
1118
1142
|
entrypoint
|
1119
1143
|
] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
|
1120
|
-
const chunks =
|
1144
|
+
const chunks =
|
1145
|
+
/** @type {Entrypoint} */
|
1146
|
+
(entrypoint).chunks.filter(c => c !== chunk);
|
1121
1147
|
if (result.allowInlineStartup && chunks.length > 0) {
|
1122
1148
|
buf2.push(
|
1123
1149
|
"// This entry module depends on other loaded chunks and execution need to be delayed"
|
@@ -1403,23 +1429,41 @@ class JavascriptModulesPlugin {
|
|
1403
1429
|
* @param {Set<Module>} inlinedModules inlinedModules
|
1404
1430
|
* @param {ChunkRenderContext} chunkRenderContext chunkRenderContext
|
1405
1431
|
* @param {CompilationHooks} hooks hooks
|
1406
|
-
* @
|
1432
|
+
* @param {boolean} allStrict allStrict
|
1433
|
+
* @param {boolean} hasChunkModules hasChunkModules
|
1434
|
+
* @returns {Map<Module, Source> | false} renamed inlined modules
|
1407
1435
|
*/
|
1408
|
-
|
1436
|
+
getRenamedInlineModule(
|
1409
1437
|
allModules,
|
1410
1438
|
renderContext,
|
1411
1439
|
inlinedModules,
|
1412
1440
|
chunkRenderContext,
|
1413
|
-
hooks
|
1441
|
+
hooks,
|
1442
|
+
allStrict,
|
1443
|
+
hasChunkModules
|
1414
1444
|
) {
|
1445
|
+
const innerStrict = !allStrict && allModules.every(m => m.buildInfo.strict);
|
1446
|
+
const isMultipleEntries = inlinedModules.size > 1;
|
1447
|
+
const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
|
1448
|
+
|
1449
|
+
// TODO:
|
1450
|
+
// This step is before the IIFE reason calculation. Ideally, it should only be executed when this function can optimize the
|
1451
|
+
// IIFE reason. Otherwise, it should directly return false. There are four reasons now, we have skipped two already, the left
|
1452
|
+
// one is 'it uses a non-standard name for the exports'.
|
1453
|
+
if (isMultipleEntries || innerStrict || !singleEntryWithModules) {
|
1454
|
+
return false;
|
1455
|
+
}
|
1456
|
+
|
1457
|
+
/** @type {Map<Module, Source>} */
|
1458
|
+
const renamedInlinedModules = new Map();
|
1415
1459
|
const { runtimeTemplate } = renderContext;
|
1416
1460
|
|
1417
|
-
/** @
|
1461
|
+
/** @typedef {{ source: Source, ast: any, variables: Set<Variable>, usedInNonInlined: Set<Variable>}} InlinedModulesInfo */
|
1462
|
+
/** @type {Map<Module, InlinedModulesInfo>} */
|
1418
1463
|
const inlinedModulesToInfo = new Map();
|
1419
1464
|
/** @type {Set<string>} */
|
1420
1465
|
const nonInlinedModuleThroughIdentifiers = new Set();
|
1421
1466
|
/** @type {Map<Module, Source>} */
|
1422
|
-
const renamedInlinedModules = new Map();
|
1423
1467
|
|
1424
1468
|
for (const m of allModules) {
|
1425
1469
|
const isInlinedModule = inlinedModules && inlinedModules.has(m);
|
@@ -1427,7 +1471,7 @@ class JavascriptModulesPlugin {
|
|
1427
1471
|
m,
|
1428
1472
|
chunkRenderContext,
|
1429
1473
|
hooks,
|
1430
|
-
isInlinedModule
|
1474
|
+
!isInlinedModule
|
1431
1475
|
);
|
1432
1476
|
|
1433
1477
|
if (!moduleSource) continue;
|
@@ -1443,7 +1487,7 @@ class JavascriptModulesPlugin {
|
|
1443
1487
|
ignoreEval: true
|
1444
1488
|
});
|
1445
1489
|
|
1446
|
-
const globalScope = scopeManager.acquire(ast);
|
1490
|
+
const globalScope = /** @type {Scope} */ (scopeManager.acquire(ast));
|
1447
1491
|
if (inlinedModules && inlinedModules.has(m)) {
|
1448
1492
|
const moduleScope = globalScope.childScopes[0];
|
1449
1493
|
inlinedModulesToInfo.set(m, {
|
@@ -1476,7 +1520,10 @@ class JavascriptModulesPlugin {
|
|
1476
1520
|
}
|
1477
1521
|
|
1478
1522
|
const usedNames = new Set(
|
1479
|
-
Array.from(
|
1523
|
+
Array.from(
|
1524
|
+
/** @type {InlinedModulesInfo} */
|
1525
|
+
(inlinedModulesToInfo.get(m)).variables
|
1526
|
+
).map(v => v.name)
|
1480
1527
|
);
|
1481
1528
|
|
1482
1529
|
for (const variable of usedInNonInlined) {
|
@@ -1492,7 +1539,7 @@ class JavascriptModulesPlugin {
|
|
1492
1539
|
);
|
1493
1540
|
usedNames.add(newName);
|
1494
1541
|
for (const identifier of allIdentifiers) {
|
1495
|
-
const r = identifier.range;
|
1542
|
+
const r = /** @type {Range} */ (identifier.range);
|
1496
1543
|
const path = getPathInAst(ast, identifier);
|
1497
1544
|
if (path && path.length > 1) {
|
1498
1545
|
const maybeProperty =
|
@@ -1530,7 +1577,7 @@ class JavascriptModulesPlugin {
|
|
1530
1577
|
);
|
1531
1578
|
const splittedInfo = extraInfo.split("/");
|
1532
1579
|
while (splittedInfo.length) {
|
1533
|
-
name = splittedInfo.pop() + (name ?
|
1580
|
+
name = splittedInfo.pop() + (name ? `_${name}` : "");
|
1534
1581
|
const nameIdent = Template.toIdentifier(name);
|
1535
1582
|
if (!usedName.has(nameIdent)) {
|
1536
1583
|
return nameIdent;
|