webpack 5.93.0 → 5.94.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 +5 -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 +104 -64
- 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 +126 -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 +12 -10
- 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 +14 -19
- 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 +31 -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 +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +31 -34
- package/lib/dependencies/ContextElementDependency.js +2 -2
- 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 +91 -69
- 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 +80 -48
- 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/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 +1 -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 +31 -31
- 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 +103 -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 +15 -14
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1 -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 +667 -347
package/lib/ExternalModule.js
CHANGED
@@ -53,7 +53,7 @@ const { register } = require("./util/serialization");
|
|
53
53
|
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
|
54
54
|
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
|
55
55
|
|
56
|
-
/** @typedef {{ attributes?: ImportAttributes }} ImportDependencyMeta */
|
56
|
+
/** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
|
57
57
|
/** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
|
58
58
|
|
59
59
|
/** @typedef {ImportDependencyMeta | CssImportDependencyMeta} DependencyMeta */
|
@@ -164,7 +164,10 @@ const getSourceForImportExternal = (
|
|
164
164
|
dependencyMeta
|
165
165
|
) => {
|
166
166
|
const importName = runtimeTemplate.outputOptions.importFunctionName;
|
167
|
-
if (
|
167
|
+
if (
|
168
|
+
!runtimeTemplate.supportsDynamicImport() &&
|
169
|
+
(importName === "import" || importName === "module-import")
|
170
|
+
) {
|
168
171
|
throw new Error(
|
169
172
|
"The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
|
170
173
|
);
|
@@ -210,7 +213,7 @@ const getSourceForImportExternal = (
|
|
210
213
|
*/
|
211
214
|
const importAssertionReplacer = (key, value) => {
|
212
215
|
if (key === "_isLegacyAssert") {
|
213
|
-
return
|
216
|
+
return;
|
214
217
|
}
|
215
218
|
|
216
219
|
return value;
|
@@ -353,7 +356,7 @@ const getSourceForModuleExternal = (
|
|
353
356
|
runtime,
|
354
357
|
runtimeTemplate
|
355
358
|
);
|
356
|
-
|
359
|
+
const expression = moduleRemapping || baseAccess;
|
357
360
|
return {
|
358
361
|
expression,
|
359
362
|
init: moduleRemapping
|
@@ -415,11 +418,10 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
|
|
415
418
|
* @param {RuntimeTemplate} runtimeTemplate the runtime template
|
416
419
|
* @returns {string} the generated source
|
417
420
|
*/
|
418
|
-
const checkExternalVariable = (variableName, request, runtimeTemplate) =>
|
419
|
-
|
421
|
+
const checkExternalVariable = (variableName, request, runtimeTemplate) =>
|
422
|
+
`if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
|
420
423
|
{ request }
|
421
424
|
)} }\n`;
|
422
|
-
};
|
423
425
|
|
424
426
|
/**
|
425
427
|
* @param {string|number} id the module id
|
@@ -532,7 +534,7 @@ class ExternalModule extends Module {
|
|
532
534
|
* @returns {string} a user readable identifier of the module
|
533
535
|
*/
|
534
536
|
readableIdentifier(requestShortener) {
|
535
|
-
return
|
537
|
+
return `external ${JSON.stringify(this.request)}`;
|
536
538
|
}
|
537
539
|
|
538
540
|
/**
|
@@ -544,6 +546,25 @@ class ExternalModule extends Module {
|
|
544
546
|
return callback(null, !this.buildMeta);
|
545
547
|
}
|
546
548
|
|
549
|
+
/**
|
550
|
+
* @param {string} externalType raw external type
|
551
|
+
* @returns {string} resolved external type
|
552
|
+
*/
|
553
|
+
getModuleImportType(externalType) {
|
554
|
+
if (externalType === "module-import") {
|
555
|
+
if (
|
556
|
+
this.dependencyMeta &&
|
557
|
+
/** @type {ImportDependencyMeta} */ (this.dependencyMeta).externalType
|
558
|
+
) {
|
559
|
+
return /** @type {ImportDependencyMeta} */ (this.dependencyMeta)
|
560
|
+
.externalType;
|
561
|
+
}
|
562
|
+
return "module";
|
563
|
+
}
|
564
|
+
|
565
|
+
return externalType;
|
566
|
+
}
|
567
|
+
|
547
568
|
/**
|
548
569
|
* @param {WebpackOptions} options webpack options
|
549
570
|
* @param {Compilation} compilation the compilation
|
@@ -576,25 +597,6 @@ class ExternalModule extends Module {
|
|
576
597
|
canMangle = true;
|
577
598
|
}
|
578
599
|
break;
|
579
|
-
case "module":
|
580
|
-
if (this.buildInfo.module) {
|
581
|
-
if (!Array.isArray(request) || request.length === 1) {
|
582
|
-
this.buildMeta.exportsType = "namespace";
|
583
|
-
canMangle = true;
|
584
|
-
}
|
585
|
-
} else {
|
586
|
-
this.buildMeta.async = true;
|
587
|
-
EnvironmentNotSupportAsyncWarning.check(
|
588
|
-
this,
|
589
|
-
compilation.runtimeTemplate,
|
590
|
-
"external module"
|
591
|
-
);
|
592
|
-
if (!Array.isArray(request) || request.length === 1) {
|
593
|
-
this.buildMeta.exportsType = "namespace";
|
594
|
-
canMangle = false;
|
595
|
-
}
|
596
|
-
}
|
597
|
-
break;
|
598
600
|
case "script":
|
599
601
|
this.buildMeta.async = true;
|
600
602
|
EnvironmentNotSupportAsyncWarning.check(
|
@@ -611,18 +613,45 @@ class ExternalModule extends Module {
|
|
611
613
|
"external promise"
|
612
614
|
);
|
613
615
|
break;
|
616
|
+
case "module":
|
614
617
|
case "import":
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
618
|
+
case "module-import": {
|
619
|
+
const type = this.getModuleImportType(externalType);
|
620
|
+
if (type === "module") {
|
621
|
+
if (this.buildInfo.module) {
|
622
|
+
if (!Array.isArray(request) || request.length === 1) {
|
623
|
+
this.buildMeta.exportsType = "namespace";
|
624
|
+
canMangle = true;
|
625
|
+
}
|
626
|
+
} else {
|
627
|
+
this.buildMeta.async = true;
|
628
|
+
EnvironmentNotSupportAsyncWarning.check(
|
629
|
+
this,
|
630
|
+
compilation.runtimeTemplate,
|
631
|
+
"external module"
|
632
|
+
);
|
633
|
+
if (!Array.isArray(request) || request.length === 1) {
|
634
|
+
this.buildMeta.exportsType = "namespace";
|
635
|
+
canMangle = false;
|
636
|
+
}
|
637
|
+
}
|
624
638
|
}
|
639
|
+
|
640
|
+
if (type === "import") {
|
641
|
+
this.buildMeta.async = true;
|
642
|
+
EnvironmentNotSupportAsyncWarning.check(
|
643
|
+
this,
|
644
|
+
compilation.runtimeTemplate,
|
645
|
+
"external import"
|
646
|
+
);
|
647
|
+
if (!Array.isArray(request) || request.length === 1) {
|
648
|
+
this.buildMeta.exportsType = "namespace";
|
649
|
+
canMangle = false;
|
650
|
+
}
|
651
|
+
}
|
652
|
+
|
625
653
|
break;
|
654
|
+
}
|
626
655
|
}
|
627
656
|
this.addDependency(new StaticExportsDependency(true, canMangle));
|
628
657
|
callback();
|
@@ -702,7 +731,8 @@ class ExternalModule extends Module {
|
|
702
731
|
request,
|
703
732
|
/** @type {string} */
|
704
733
|
(runtimeTemplate.outputOptions.importMetaName),
|
705
|
-
|
734
|
+
/** @type {boolean} */
|
735
|
+
(runtimeTemplate.supportNodePrefixForCoreModules())
|
706
736
|
)
|
707
737
|
: getSourceForCommonJsExternal(request);
|
708
738
|
case "amd":
|
@@ -719,42 +749,52 @@ class ExternalModule extends Module {
|
|
719
749
|
runtimeTemplate
|
720
750
|
);
|
721
751
|
}
|
722
|
-
case "import":
|
723
|
-
return getSourceForImportExternal(
|
724
|
-
request,
|
725
|
-
runtimeTemplate,
|
726
|
-
/** @type {ImportDependencyMeta} */ (dependencyMeta)
|
727
|
-
);
|
728
752
|
case "script":
|
729
753
|
return getSourceForScriptExternal(request, runtimeTemplate);
|
730
|
-
case "module":
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
(runtimeTemplate.supportsEcmaScriptModuleSyntax()
|
736
|
-
? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
|
737
|
-
: "")
|
738
|
-
);
|
739
|
-
}
|
754
|
+
case "module":
|
755
|
+
case "import":
|
756
|
+
case "module-import": {
|
757
|
+
const type = this.getModuleImportType(externalType);
|
758
|
+
if (type === "import") {
|
740
759
|
return getSourceForImportExternal(
|
741
760
|
request,
|
742
761
|
runtimeTemplate,
|
743
762
|
/** @type {ImportDependencyMeta} */ (dependencyMeta)
|
744
763
|
);
|
745
764
|
}
|
746
|
-
|
747
|
-
|
748
|
-
|
765
|
+
|
766
|
+
if (type === "module") {
|
767
|
+
if (!(/** @type {BuildInfo} */ (this.buildInfo).module)) {
|
768
|
+
if (!runtimeTemplate.supportsDynamicImport()) {
|
769
|
+
throw new Error(
|
770
|
+
`The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
|
771
|
+
runtimeTemplate.supportsEcmaScriptModuleSyntax()
|
772
|
+
? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
|
773
|
+
: ""
|
774
|
+
}`
|
775
|
+
);
|
776
|
+
}
|
777
|
+
return getSourceForImportExternal(
|
778
|
+
request,
|
779
|
+
runtimeTemplate,
|
780
|
+
/** @type {ImportDependencyMeta} */ (dependencyMeta)
|
781
|
+
);
|
782
|
+
}
|
783
|
+
if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
|
784
|
+
throw new Error(
|
785
|
+
"The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
|
786
|
+
);
|
787
|
+
}
|
788
|
+
return getSourceForModuleExternal(
|
789
|
+
request,
|
790
|
+
moduleGraph.getExportsInfo(this),
|
791
|
+
runtime,
|
792
|
+
runtimeTemplate,
|
793
|
+
/** @type {ImportDependencyMeta} */ (dependencyMeta)
|
749
794
|
);
|
750
795
|
}
|
751
|
-
|
752
|
-
|
753
|
-
moduleGraph.getExportsInfo(this),
|
754
|
-
runtime,
|
755
|
-
runtimeTemplate,
|
756
|
-
/** @type {ImportDependencyMeta} */ (dependencyMeta)
|
757
|
-
);
|
796
|
+
|
797
|
+
break;
|
758
798
|
}
|
759
799
|
case "var":
|
760
800
|
case "promise":
|
@@ -846,7 +886,7 @@ class ExternalModule extends Module {
|
|
846
886
|
if (sourceData.init)
|
847
887
|
sourceString = `${sourceData.init}\n${sourceString}`;
|
848
888
|
|
849
|
-
let data
|
889
|
+
let data;
|
850
890
|
if (sourceData.chunkInitFragments) {
|
851
891
|
data = new Map();
|
852
892
|
data.set("chunkInitFragments", sourceData.chunkInitFragments);
|
@@ -25,6 +25,7 @@ const EMPTY_RESOLVE_OPTIONS = {};
|
|
25
25
|
// TODO webpack 6 remove this
|
26
26
|
const callDeprecatedExternals = util.deprecate(
|
27
27
|
(externalsFunction, context, request, cb) => {
|
28
|
+
// eslint-disable-next-line no-useless-call
|
28
29
|
externalsFunction.call(null, context, request, cb);
|
29
30
|
},
|
30
31
|
"The externals-function should be defined like ({context, request}, cb) => { ... }",
|
@@ -33,6 +34,11 @@ const callDeprecatedExternals = util.deprecate(
|
|
33
34
|
|
34
35
|
const cache = new WeakMap();
|
35
36
|
|
37
|
+
/**
|
38
|
+
* @param {object} obj obj
|
39
|
+
* @param {TODO} layer layer
|
40
|
+
* @returns {object} result
|
41
|
+
*/
|
36
42
|
const resolveLayer = (obj, layer) => {
|
37
43
|
let map = cache.get(obj);
|
38
44
|
if (map === undefined) {
|
@@ -47,6 +53,9 @@ const resolveLayer = (obj, layer) => {
|
|
47
53
|
return result;
|
48
54
|
};
|
49
55
|
|
56
|
+
/** @typedef {string|string[]|boolean|Record<string, string|string[]>} ExternalValue */
|
57
|
+
/** @typedef {string|undefined} ExternalType */
|
58
|
+
|
50
59
|
class ExternalModuleFactoryPlugin {
|
51
60
|
/**
|
52
61
|
* @param {string | undefined} type default external type
|
@@ -72,8 +81,8 @@ class ExternalModuleFactoryPlugin {
|
|
72
81
|
const dependencyType = data.dependencyType;
|
73
82
|
|
74
83
|
/**
|
75
|
-
* @param {
|
76
|
-
* @param {
|
84
|
+
* @param {ExternalValue} value the external config
|
85
|
+
* @param {ExternalType | undefined} type type of external
|
77
86
|
* @param {function((Error | null)=, ExternalModule=): void} callback callback
|
78
87
|
* @returns {void}
|
79
88
|
*/
|
@@ -83,12 +92,7 @@ class ExternalModuleFactoryPlugin {
|
|
83
92
|
return callback();
|
84
93
|
}
|
85
94
|
/** @type {string | string[] | Record<string, string|string[]>} */
|
86
|
-
let externalConfig;
|
87
|
-
if (value === true) {
|
88
|
-
externalConfig = dependency.request;
|
89
|
-
} else {
|
90
|
-
externalConfig = value;
|
91
|
-
}
|
95
|
+
let externalConfig = value === true ? dependency.request : value;
|
92
96
|
// When no explicit type is specified, extract it from the externalConfig
|
93
97
|
if (type === undefined) {
|
94
98
|
if (
|
@@ -122,8 +126,16 @@ class ExternalModuleFactoryPlugin {
|
|
122
126
|
dependency instanceof ImportDependency ||
|
123
127
|
dependency instanceof ContextElementDependency
|
124
128
|
) {
|
129
|
+
const externalType =
|
130
|
+
dependency instanceof HarmonyImportDependency
|
131
|
+
? "module"
|
132
|
+
: dependency instanceof ImportDependency
|
133
|
+
? "import"
|
134
|
+
: undefined;
|
135
|
+
|
125
136
|
dependencyMeta = {
|
126
|
-
attributes: dependency.assertions
|
137
|
+
attributes: dependency.assertions,
|
138
|
+
externalType
|
127
139
|
};
|
128
140
|
} else if (dependency instanceof CssImportDependency) {
|
129
141
|
dependencyMeta = {
|
@@ -137,7 +149,8 @@ class ExternalModuleFactoryPlugin {
|
|
137
149
|
null,
|
138
150
|
new ExternalModule(
|
139
151
|
externalConfig,
|
140
|
-
type
|
152
|
+
/** @type {string} */
|
153
|
+
(type || globalType),
|
141
154
|
dependency.request,
|
142
155
|
dependencyMeta
|
143
156
|
)
|