@depup/webpack 5.110.3-depup.0 → 5.111.1-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -8
- package/changes.json +7 -11
- package/lib/APIPlugin.js +26 -11
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/Cache.js +8 -3
- package/lib/CacheFacade.js +1 -1
- package/lib/CircularModulesPlugin.js +157 -55
- package/lib/CleanPlugin.js +2 -2
- package/lib/CompatibilityPlugin.js +3 -4
- package/lib/Compilation.js +336 -337
- package/lib/Compiler.js +213 -51
- package/lib/ConstPlugin.js +16 -132
- package/lib/CopyPlugin.js +1054 -0
- package/lib/DefinePlugin.js +24 -8
- package/lib/DependencyTemplate.js +2 -1
- package/lib/DotenvPlugin.js +24 -28
- package/lib/ErrorHelpers.js +113 -0
- package/lib/ExportsInfo.js +20 -16
- package/lib/ExternalModule.js +47 -22
- package/lib/FileSystemInfo.js +17 -14
- package/lib/FlagDependencyExportsPlugin.js +53 -34
- package/lib/FlagDependencyUsagePlugin.js +9 -13
- package/lib/Generator.js +24 -2
- package/lib/HotModuleReplacementPlugin.js +55 -7
- package/lib/IgnorePlugin.js +1 -1
- package/lib/JavascriptMetaInfoPlugin.js +5 -3
- package/lib/LoaderOptionsPlugin.js +1 -1
- package/lib/MainTemplate.js +5 -1
- package/lib/Module.js +19 -10
- package/lib/ModuleGraph.js +6 -9
- package/lib/MultiCompiler.js +7 -17
- package/lib/MultiWatching.js +1 -1
- package/lib/NormalModule.js +135 -50
- package/lib/NormalModuleFactory.js +1 -1
- package/lib/RuntimeGlobals.js +21 -7
- package/lib/RuntimeModule.js +28 -12
- package/lib/RuntimePlugin.js +30 -3
- package/lib/RuntimeTemplate.js +813 -518
- package/lib/SourceMapDevToolPlugin.js +54 -104
- package/lib/TemplatedPathPlugin.js +16 -59
- package/lib/Watching.js +9 -0
- package/lib/WebpackOptionsApply.js +84 -91
- package/lib/asset/AssetBytesGenerator.js +7 -1
- package/lib/asset/AssetGenerator.js +50 -24
- package/lib/asset/AssetModule.js +3 -0
- package/lib/asset/AssetSourceGenerator.js +7 -1
- package/lib/asset/WebManifestParser.js +7 -5
- package/lib/buildChunkGraph.js +11 -15
- package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +4 -4
- package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
- package/lib/cache/PackFileCacheStrategy.js +17 -19
- package/lib/cache/getLazyHashedEtag.js +3 -5
- package/lib/config/browserslistTargetHandler.js +17 -4
- package/lib/config/defaults.js +138 -128
- package/lib/config/getClaimedAssetTypes.js +10 -11
- package/lib/config/normalization.js +82 -12
- package/lib/config/target.js +13 -4
- package/lib/container/ContainerReferencePlugin.js +6 -0
- package/lib/container/RemoteRuntimeModule.js +9 -0
- package/lib/container/declaredRemotes.js +39 -0
- package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
- package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
- package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
- package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
- package/lib/css/CssGenerator.js +27 -11
- package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
- package/lib/css/CssLoadingRuntimeModule.js +94 -36
- package/lib/css/CssModule.js +1 -1
- package/lib/css/CssModulesPlugin.js +7 -6
- package/lib/css/CssParser.js +162 -31
- package/lib/css/CssServerStylesRuntimeModule.js +9 -0
- package/lib/css/cssMinify.js +43 -32
- package/lib/css/data.js +3514 -869
- package/lib/css/syntax.js +6370 -1220
- package/lib/debug/ProfilingPlugin.js +7 -4
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
- package/lib/dependencies/AMDRuntimeModules.js +18 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
- package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
- package/lib/dependencies/CommonJsPlugin.js +19 -3
- package/lib/dependencies/CommonJsRequireDependency.js +14 -5
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
- package/lib/dependencies/ContextDependency.js +1 -1
- package/lib/dependencies/ContextDependencyHelpers.js +3 -9
- package/lib/dependencies/ContextElementDependency.js +1 -1
- package/lib/dependencies/CssIcssExportDependency.js +13 -9
- package/lib/dependencies/CssIcssImportDependency.js +3 -6
- package/lib/dependencies/CssUrlDependency.js +3 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
- package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
- package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
- package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
- package/lib/dependencies/HarmonyImportDependency.js +6 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
- package/lib/dependencies/HtmlEntryDependency.js +124 -102
- package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
- package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
- package/lib/dependencies/ImportMetaMainDependency.js +104 -0
- package/lib/dependencies/ImportMetaPlugin.js +67 -25
- package/lib/dependencies/ImportParserPlugin.js +1 -1
- package/lib/dependencies/LoaderPlugin.js +26 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
- package/lib/dependencies/SystemRuntimeModule.js +9 -0
- package/lib/dependencies/URLContextDependency.js +1 -1
- package/lib/dependencies/URLDependency.js +6 -5
- package/lib/dependencies/WorkerAndWorkletPlugin.js +15 -21
- package/lib/dependencies/WorkerDependency.js +7 -7
- package/lib/dependencies/WorkletDependency.js +7 -11
- package/lib/dll/DelegatedModule.js +18 -1
- package/lib/dll/DllReferencePlugin.js +11 -8
- package/lib/dll/LibManifestPlugin.js +1 -1
- package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
- package/lib/errors/DuplicateModulesWarning.js +12 -7
- package/lib/errors/EmptyCopyPatternWarning.js +26 -0
- package/lib/errors/ExternalStarReexportError.js +44 -0
- package/lib/errors/HookWebpackError.js +3 -2
- package/lib/errors/MissingSourceMapsWarning.js +36 -0
- package/lib/errors/ModuleParseError.js +2 -1
- package/lib/errors/UnusedAssetsWarning.js +36 -0
- package/lib/errors/UnusedFederationWarning.js +35 -0
- package/lib/errors/UnusedModulesWarning.js +38 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
- package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
- package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
- package/lib/hmr/LazyCompilationPlugin.js +3 -5
- package/lib/html/HtmlGenerator.js +72 -87
- package/lib/html/HtmlModulesPlugin.js +418 -200
- package/lib/html/HtmlParser.js +110 -147
- package/lib/html/builtinEmbeddedRenderer.js +107 -0
- package/lib/html/data.js +142 -7
- package/lib/html/htmlMinify.js +92 -122
- package/lib/html/syntax.js +1618 -1391
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/index.js +49 -3
- package/lib/javascript/ChunkFormatHelpers.js +4 -3
- package/lib/javascript/JavascriptGenerator.js +8 -1
- package/lib/javascript/JavascriptModule.js +1 -0
- package/lib/javascript/JavascriptModulesPlugin.js +73 -72
- package/lib/javascript/JavascriptParser.js +1970 -900
- package/lib/javascript/StartupHelpers.js +27 -3
- package/lib/javascript/data.js +172 -0
- package/lib/javascript/grammar.js +5546 -0
- package/lib/javascript/parser.js +1500 -0
- package/lib/javascript/regexp.js +1762 -0
- package/lib/javascript/regexpData.js +51 -0
- package/lib/javascript/syntax.js +9061 -5262
- package/lib/json/JsonGenerator.js +7 -1
- package/lib/library/ModuleLibraryPlugin.js +171 -132
- package/lib/loaders/LoaderRunner.js +137 -9
- package/lib/node/NodeWatchFileSystem.js +3 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
- package/lib/optimize/AggressiveMergingPlugin.js +3 -5
- package/lib/optimize/ConcatenatedModule.js +178 -120
- package/lib/optimize/ConstExportsPlugin.js +50 -39
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
- package/lib/optimize/InlineExports.js +20 -123
- package/lib/optimize/InnerGraphPlugin.js +7 -13
- package/lib/optimize/LimitChunkCountPlugin.js +5 -8
- package/lib/optimize/MangleExportsPlugin.js +13 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
- package/lib/optimize/RealContentHashPlugin.js +68 -9
- package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
- package/lib/optimize/SplitChunksPlugin.js +2 -4
- package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
- package/lib/performance/BroadContextsPlugin.js +1 -1
- package/lib/performance/CacheEffectivenessPlugin.js +7 -7
- package/lib/performance/DuplicateModulesPlugin.js +57 -13
- package/lib/performance/EvalUsagePlugin.js +5 -2
- package/lib/performance/MissingSourceMapsPlugin.js +115 -0
- package/lib/performance/PureAnnotationsPlugin.js +6 -3
- package/lib/performance/SizeLimitsPlugin.js +2 -4
- package/lib/performance/TopLevelThisPlugin.js +5 -4
- package/lib/performance/UnusedAssetsPlugin.js +109 -0
- package/lib/performance/UnusedFederationPlugin.js +147 -0
- package/lib/performance/UnusedModulesPlugin.js +141 -0
- package/lib/performance/UnusedReexportsPlugin.js +1 -55
- package/lib/performance/isOnlyReexported.js +65 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
- package/lib/prefetch/ResourceHintPlugin.js +18 -23
- package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
- package/lib/rules/RuleSetCompiler.js +211 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +98 -66
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
- package/lib/runtime/BaseUriRuntimeModule.js +9 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
- package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
- package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
- package/lib/runtime/GlobalRuntimeModule.js +11 -4
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
- package/lib/runtime/HelperRuntimeModule.js +10 -0
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +305 -224
- package/lib/runtime/NonceRuntimeModule.js +9 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
- package/lib/runtime/PublicPathRuntimeModule.js +9 -0
- package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
- package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
- package/lib/runtime/SystemContextRuntimeModule.js +9 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
- package/lib/schemes/DataUriPlugin.js +3 -6
- package/lib/schemes/VirtualUrlPlugin.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +9 -9
- package/lib/serialization/FileMiddleware.js +16 -16
- package/lib/serialization/ObjectMiddleware.js +168 -139
- package/lib/sharing/ConsumeSharedPlugin.js +12 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
- package/lib/sharing/ShareRuntimeModule.js +9 -0
- package/lib/sharing/declaredShared.js +47 -0
- package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
- package/lib/typescript/TypeScriptPlugin.js +2 -3
- package/lib/url/URLParserPlugin.js +6 -8
- package/lib/util/LocConverter.js +4 -7
- package/lib/util/SourceProcessor.js +91 -91
- package/lib/util/async.js +292 -0
- package/lib/util/buildDiagnostics.js +69 -0
- package/lib/util/chainedImports.js +3 -4
- package/lib/util/concatenate.js +4 -4
- package/lib/util/createHooksRegistry.js +1 -2
- package/lib/util/dataURL.js +2 -3
- package/lib/util/deterministicGrouping.js +8 -13
- package/lib/util/findGraphRoots.js +6 -13
- package/lib/util/fs.js +27 -1
- package/lib/util/globUtils.js +1 -1
- package/lib/util/handlerKeys.js +40 -0
- package/lib/util/hash/wasm-hash.js +3 -4
- package/lib/util/identifier.js +20 -0
- package/lib/util/internalSerializables.js +5 -1
- package/lib/util/registerExternalSerializer.js +6 -45
- package/lib/util/semver.js +5 -3
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
- package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
- package/package.json +55 -46
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +379 -66
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/ManifestPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/types.d.ts +1723 -604
- package/lib/dependencies/ExportBindingInitFragment.js +0 -191
- package/lib/errors/EntrypointOverlapWarning.js +0 -45
- package/lib/performance/EntrypointOverlapPlugin.js +0 -122
|
@@ -27,6 +27,7 @@ const createHooksRegistry = require("../util/createHooksRegistry");
|
|
|
27
27
|
const { propertyAccess } = require("../util/property");
|
|
28
28
|
const BuildTimeConstDependency = require("./BuildTimeConstDependency");
|
|
29
29
|
const ConstDependency = require("./ConstDependency");
|
|
30
|
+
const ImportMetaMainDependency = require("./ImportMetaMainDependency");
|
|
30
31
|
const ImportMetaResolveDependency = require("./ImportMetaResolveDependency");
|
|
31
32
|
const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
|
|
32
33
|
|
|
@@ -92,11 +93,9 @@ const IMPORT_META_FIELDS = new Set([
|
|
|
92
93
|
"webpackHot"
|
|
93
94
|
]);
|
|
94
95
|
|
|
95
|
-
//
|
|
96
|
-
// and
|
|
97
|
-
//
|
|
98
|
-
// pragmas `import.meta.webpackHot`/`webpackContext` are intentionally excluded:
|
|
99
|
-
// they are usable in CommonJS modules and must not force ESM.
|
|
96
|
+
// The `import.meta` accesses that exist only in ES modules, and so mark one.
|
|
97
|
+
// `dirname` and `filename` are resolved by NodeStuffPlugin. The webpack pragmas
|
|
98
|
+
// are excluded: they work in CommonJS too and must not force ESM.
|
|
100
99
|
const IMPORT_META_NAMES = [
|
|
101
100
|
IMPORT_META,
|
|
102
101
|
IMPORT_META_URL,
|
|
@@ -108,11 +107,11 @@ const IMPORT_META_NAMES = [
|
|
|
108
107
|
IMPORT_META_RESOLVE
|
|
109
108
|
];
|
|
110
109
|
|
|
111
|
-
//
|
|
112
|
-
// (HarmonyDetectionParserPlugin, non-bailing) must observe every
|
|
113
|
-
// any bailing replacement
|
|
114
|
-
// DefinePlugin object defines (default stage 0) and its nested
|
|
115
|
-
// handler (stage 100).
|
|
110
|
+
// WHY: the ordering contract for the `import.meta` parser hooks across plugins.
|
|
111
|
+
// ESM detection (HarmonyDetectionParserPlugin, non-bailing) must observe every
|
|
112
|
+
// access before any bailing replacement, and the merged replacements here must
|
|
113
|
+
// run before DefinePlugin's object defines (default stage 0) and its nested
|
|
114
|
+
// destructuring handler (stage 100).
|
|
116
115
|
const IMPORT_META_STAGE_ESM_DETECTION = -1000;
|
|
117
116
|
const IMPORT_META_STAGE_REPLACEMENT = -100;
|
|
118
117
|
|
|
@@ -154,17 +153,44 @@ const isImportMetaFieldEnabled = (importMeta, field) => {
|
|
|
154
153
|
};
|
|
155
154
|
|
|
156
155
|
/**
|
|
157
|
-
* Renders the `import.meta.main` comparison
|
|
156
|
+
* Renders the `import.meta.main` comparison, which reads the module argument a
|
|
157
|
+
* scope-hoisted module does not have. A caller that can answer the expression
|
|
158
|
+
* statically for an inner module rules out only the concatenation root.
|
|
158
159
|
* @param {Parser} parser the parser
|
|
160
|
+
* @param {boolean} staticWhenInner whether an inner concatenated module answers it without the comparison
|
|
159
161
|
* @returns {string} the comparison expression
|
|
160
162
|
*/
|
|
161
|
-
const renderImportMetaMain = (parser) => {
|
|
163
|
+
const renderImportMetaMain = (parser, staticWhenInner) => {
|
|
162
164
|
const currentModule = parser.state.module;
|
|
163
|
-
|
|
164
|
-
|
|
165
|
+
const buildInfo =
|
|
166
|
+
/** @type {JavascriptModuleBuildInfo} */
|
|
167
|
+
(currentModule.buildInfo);
|
|
168
|
+
if (staticWhenInner) {
|
|
169
|
+
buildInfo.moduleConcatenationRootBailout = IMPORT_META_MAIN;
|
|
170
|
+
} else {
|
|
171
|
+
buildInfo.moduleConcatenationBailout = IMPORT_META_MAIN;
|
|
172
|
+
}
|
|
165
173
|
return `${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${currentModule.moduleArgument}`;
|
|
166
174
|
};
|
|
167
175
|
|
|
176
|
+
const IMPORT_META_VAR = "__webpack_import_meta__";
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The name of the module's synthesized `import.meta` binding, stepped aside when
|
|
180
|
+
* the source already spells it. Re-bundling webpack output is the case that
|
|
181
|
+
* matters: the earlier binding would shadow this one and make it initialize
|
|
182
|
+
* itself.
|
|
183
|
+
* @param {Parser} parser the parser
|
|
184
|
+
* @returns {string} a name no declaration in this module takes
|
|
185
|
+
*/
|
|
186
|
+
const importMetaVarName = (parser) => {
|
|
187
|
+
const { source } = parser.state;
|
|
188
|
+
if (!source || !source.includes(IMPORT_META_VAR)) return IMPORT_META_VAR;
|
|
189
|
+
let index = 2;
|
|
190
|
+
while (source.includes(`__webpack_import_meta_${index}__`)) index++;
|
|
191
|
+
return `__webpack_import_meta_${index}__`;
|
|
192
|
+
};
|
|
193
|
+
|
|
168
194
|
/**
|
|
169
195
|
* Checks whether the callee is the `import.meta.resolve` member.
|
|
170
196
|
* @param {Expression | Super} callee call callee
|
|
@@ -261,6 +287,10 @@ class ImportMetaPlugin {
|
|
|
261
287
|
BuildTimeConstDependency,
|
|
262
288
|
new BuildTimeConstDependency.Template()
|
|
263
289
|
);
|
|
290
|
+
compilation.dependencyTemplates.set(
|
|
291
|
+
ImportMetaMainDependency,
|
|
292
|
+
new ImportMetaMainDependency.Template()
|
|
293
|
+
);
|
|
264
294
|
|
|
265
295
|
/**
|
|
266
296
|
* Returns file url.
|
|
@@ -442,7 +472,7 @@ class ImportMetaPlugin {
|
|
|
442
472
|
const referencedPropertiesInDestructuring =
|
|
443
473
|
parser.destructuringAssignmentPropertiesFor(metaProperty);
|
|
444
474
|
if (!referencedPropertiesInDestructuring) {
|
|
445
|
-
const varName =
|
|
475
|
+
const varName = importMetaVarName(parser);
|
|
446
476
|
const knownProps = [];
|
|
447
477
|
if (isImportMetaFieldEnabled(importMeta, "url")) {
|
|
448
478
|
knownProps.push(`url: ${importMetaUrl()}`);
|
|
@@ -451,7 +481,9 @@ class ImportMetaPlugin {
|
|
|
451
481
|
knownProps.push(`webpack: ${importMetaWebpackVersion()}`);
|
|
452
482
|
}
|
|
453
483
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
454
|
-
knownProps.push(
|
|
484
|
+
knownProps.push(
|
|
485
|
+
`main: ${renderImportMetaMain(parser, false)}`
|
|
486
|
+
);
|
|
455
487
|
}
|
|
456
488
|
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
457
489
|
addDefinitionValueDependencies();
|
|
@@ -471,8 +503,10 @@ class ImportMetaPlugin {
|
|
|
471
503
|
const plainInitCode = `var ${varName} = {${knownProps.join(
|
|
472
504
|
", "
|
|
473
505
|
)}};\n`;
|
|
506
|
+
// Each module owns its `import.meta`: it copies the bundle's one
|
|
507
|
+
// and inherits from it, so later host writes stay visible.
|
|
474
508
|
const initCode = preserveUnknown(importMeta)
|
|
475
|
-
? `var ${varName} = Object.assign(import.meta, {${knownProps.join(
|
|
509
|
+
? `var ${varName} = Object.assign(Object.create(import.meta), import.meta, {${knownProps.join(
|
|
476
510
|
", "
|
|
477
511
|
)}});\n`
|
|
478
512
|
: plainInitCode;
|
|
@@ -556,7 +590,7 @@ class ImportMetaPlugin {
|
|
|
556
590
|
break;
|
|
557
591
|
case "main":
|
|
558
592
|
if (fieldEnabled) {
|
|
559
|
-
append(`main: ${renderImportMetaMain(parser)},`);
|
|
593
|
+
append(`main: ${renderImportMetaMain(parser, false)},`);
|
|
560
594
|
runtimeRequirements.push(
|
|
561
595
|
RuntimeGlobals.moduleCache,
|
|
562
596
|
RuntimeGlobals.entryModuleId,
|
|
@@ -740,13 +774,21 @@ class ImportMetaPlugin {
|
|
|
740
774
|
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
741
775
|
parser.hooks.expression
|
|
742
776
|
.for(IMPORT_META_MAIN)
|
|
743
|
-
.tap(PLUGIN_NAME, (expr) =>
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
777
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
778
|
+
const dep = new ImportMetaMainDependency(
|
|
779
|
+
renderImportMetaMain(parser, true),
|
|
780
|
+
"false",
|
|
781
|
+
/** @type {Range} */ (expr.range),
|
|
782
|
+
[
|
|
783
|
+
RuntimeGlobals.moduleCache,
|
|
784
|
+
RuntimeGlobals.entryModuleId,
|
|
785
|
+
RuntimeGlobals.module
|
|
786
|
+
]
|
|
787
|
+
);
|
|
788
|
+
dep.loc = parser.getLocation(expr);
|
|
789
|
+
parser.state.module.addPresentationalDependency(dep);
|
|
790
|
+
return true;
|
|
791
|
+
});
|
|
750
792
|
parser.hooks.typeof
|
|
751
793
|
.for(IMPORT_META_MAIN)
|
|
752
794
|
.tap(
|
|
@@ -45,7 +45,7 @@ const getCommentCompilationWarning = memoize(() =>
|
|
|
45
45
|
* } from "../../declarations/WebpackOptions"
|
|
46
46
|
*/
|
|
47
47
|
/** @import { RawChunkGroupOptions } from "../ChunkGroup" */
|
|
48
|
-
/** @import { ContextMode } from "../ContextModule" */
|
|
48
|
+
/** @import { ContextMode } from "../context/ContextModule" */
|
|
49
49
|
/** @import { RawReferencedExports } from "../Dependency" */
|
|
50
50
|
/** @import { BuildMeta } from "../Module" */
|
|
51
51
|
/**
|
|
@@ -21,7 +21,7 @@ const LoaderImportDependency = require("./LoaderImportDependency");
|
|
|
21
21
|
* } from "../Compilation"
|
|
22
22
|
*/
|
|
23
23
|
/** @import Compiler from "../Compiler" */
|
|
24
|
-
/** @import { BuildInfo } from "../Module" */
|
|
24
|
+
/** @import Module, { BuildInfo } from "../Module" */
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
27
|
* Defines the import module callback callback.
|
|
@@ -39,6 +39,31 @@ const LoaderImportDependency = require("./LoaderImportDependency");
|
|
|
39
39
|
* @property {string=} baseUri target base uri
|
|
40
40
|
*/
|
|
41
41
|
|
|
42
|
+
/**
|
|
43
|
+
* @callback LoadModuleCallback
|
|
44
|
+
* @param {Error | null} err error object
|
|
45
|
+
* @param {(string | Buffer)=} source source of the loaded module
|
|
46
|
+
* @param {(object | null)=} sourceMap source map of the loaded module
|
|
47
|
+
* @param {Module=} module the loaded module
|
|
48
|
+
* @returns {void}
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* `importModule` takes a callback or, given none, answers with a promise, and
|
|
53
|
+
* TypeScript reads an intersection of call signatures as an overload set
|
|
54
|
+
* @typedef {{ (request: string, options: ImportModuleOptions | undefined, callback: ImportModuleCallback): void } & { (request: string, options?: ImportModuleOptions): Promise<ExecuteModuleExports> }} ImportModuleMethod
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* These properties are added by the LoaderPlugin
|
|
59
|
+
* @typedef {object} LoaderPluginLoaderContext
|
|
60
|
+
* @property {(request: string, callback: LoadModuleCallback) => void} loadModule Resolves the given request to a module, applies all configured loaders and calls
|
|
61
|
+
* back with the generated source, the sourceMap and the module instance (usually an
|
|
62
|
+
* instance of NormalModule). Use this function if you need to know the source code
|
|
63
|
+
* of another module to generate the result.
|
|
64
|
+
* @property {ImportModuleMethod} importModule
|
|
65
|
+
*/
|
|
66
|
+
|
|
42
67
|
const PLUGIN_NAME = "LoaderPlugin";
|
|
43
68
|
|
|
44
69
|
class LoaderPlugin {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const RequireContextDependency = require("./RequireContextDependency");
|
|
9
9
|
|
|
10
|
-
/** @import { ContextMode } from "../ContextModule" */
|
|
10
|
+
/** @import { ContextMode } from "../context/ContextModule" */
|
|
11
11
|
/** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
|
|
12
12
|
|
|
13
13
|
const PLUGIN_NAME = "RequireContextDependencyParserPlugin";
|
|
@@ -24,6 +24,15 @@ class SystemRuntimeModule extends RuntimeModule {
|
|
|
24
24
|
return false;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The `[handlerMap, key]` pairs this module installs onto a chunk handler map
|
|
29
|
+
* such as `__webpack_require__.f`, or `null` where it cannot name them.
|
|
30
|
+
* @returns {[string, string][] | null} installed chunk handlers (do not mutate)
|
|
31
|
+
*/
|
|
32
|
+
getInstalledChunkHandlers() {
|
|
33
|
+
return RuntimeModule.NO_CHUNK_HANDLERS;
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
/**
|
|
28
37
|
* Generates runtime code for this runtime module.
|
|
29
38
|
* @returns {string | null} runtime code
|
|
@@ -9,7 +9,7 @@ const makeSerializable = require("../util/makeSerializable");
|
|
|
9
9
|
const ContextDependency = require("./ContextDependency");
|
|
10
10
|
const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
|
|
11
11
|
|
|
12
|
-
/** @import { ContextOptions } from "../ContextModule" */
|
|
12
|
+
/** @import { ContextOptions } from "../context/ContextModule" */
|
|
13
13
|
/** @import { Range } from "../javascript/JavascriptParser" */
|
|
14
14
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range]>} ObjectDeserializerContext */
|
|
15
15
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range]>} ObjectSerializerContext */
|
|
@@ -263,11 +263,12 @@ URLDependency.Template = class URLDependencyTemplate extends (
|
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
265
265
|
|
|
266
|
-
//
|
|
267
|
-
//
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
//
|
|
266
|
+
// WHY: ESM module output emits the analyzable
|
|
267
|
+
// `new URL("./asset", import.meta.url)` form — a literal specifier, no runtime
|
|
268
|
+
// helpers — so other bundlers and webpack itself can statically follow the
|
|
269
|
+
// asset, while `url: "relative"` keeps the runtime form. A prefetch or preload
|
|
270
|
+
// hint does not force it: the `<link>` is emitted separately at chunk startup
|
|
271
|
+
// (`StartupAssetHintRuntimeModule`), independent of the call site.
|
|
271
272
|
if (
|
|
272
273
|
!dep.relative &&
|
|
273
274
|
runtimeTemplate.supportsAnalyzable(
|
|
@@ -86,10 +86,9 @@ const WORKER_DEFAULT_SYNTAX = [
|
|
|
86
86
|
"Worker from worker_threads"
|
|
87
87
|
];
|
|
88
88
|
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
//
|
|
92
|
-
// pre-added via `addModule` from the calling scope (see WorkletDependency).
|
|
89
|
+
// A worklet is always a module script loaded through `addModule`, and unlike a
|
|
90
|
+
// Web Worker cannot load further chunks at runtime, so WorkletDependency wraps
|
|
91
|
+
// the call and pre-adds every chunk from the calling scope.
|
|
93
92
|
const WORKLET_DEFAULT_SYNTAX = [
|
|
94
93
|
"*context.audioWorklet.addModule()",
|
|
95
94
|
"*audioWorklet.addModule()",
|
|
@@ -406,10 +405,9 @@ class WorkerAndWorkletPlugin {
|
|
|
406
405
|
)
|
|
407
406
|
);
|
|
408
407
|
} else {
|
|
409
|
-
// `webpackEntryOptions` is user input from a magic
|
|
410
|
-
//
|
|
411
|
-
//
|
|
412
|
-
// `prototype`.
|
|
408
|
+
// `webpackEntryOptions` is user input from a magic comment, so
|
|
409
|
+
// only safe own keys are copied, against prototype pollution
|
|
410
|
+
// through `__proto__` or `constructor`.
|
|
413
411
|
const userEntryOptions = importOptions.webpackEntryOptions;
|
|
414
412
|
for (const key of Object.keys(userEntryOptions)) {
|
|
415
413
|
if (
|
|
@@ -502,11 +500,9 @@ class WorkerAndWorkletPlugin {
|
|
|
502
500
|
|
|
503
501
|
/** @type {ResourceHint | undefined} */
|
|
504
502
|
let resourceHint;
|
|
505
|
-
// Resource-hint comments belong to the asset expression
|
|
506
|
-
//
|
|
507
|
-
//
|
|
508
|
-
// `import.meta.url` there is no `new URL` and no place for
|
|
509
|
-
// the comments to go, so resource hints are skipped.
|
|
503
|
+
// Resource-hint comments belong to the asset expression, so they are
|
|
504
|
+
// read from the inner `new URL(...)` range alone. A bare
|
|
505
|
+
// `import.meta.url` has none, so its hints are skipped.
|
|
510
506
|
if (arg1.type === "NewExpression") {
|
|
511
507
|
const { options: urlImportOptions } = parser.parseCommentOptions(
|
|
512
508
|
/** @type {Range} */ (arg1.range)
|
|
@@ -652,10 +648,9 @@ class WorkerAndWorkletPlugin {
|
|
|
652
648
|
name: entryOptions.name,
|
|
653
649
|
circular: false,
|
|
654
650
|
entryOptions: {
|
|
655
|
-
// A module worklet links its split chunks
|
|
656
|
-
//
|
|
657
|
-
//
|
|
658
|
-
// chunks use import-scripts and are pre-added from the calling scope.
|
|
651
|
+
// A module worklet links its split chunks through native `import`
|
|
652
|
+
// and keeps module chunk loading. A script worklet loads none at
|
|
653
|
+
// runtime, so its chunks are pre-added from the calling scope.
|
|
659
654
|
chunkLoading: this._module
|
|
660
655
|
? this._chunkLoading
|
|
661
656
|
: "import-scripts",
|
|
@@ -800,10 +795,9 @@ class WorkerAndWorkletPlugin {
|
|
|
800
795
|
);
|
|
801
796
|
}
|
|
802
797
|
|
|
803
|
-
// Worklet parsing is opt-in: unset falls back to
|
|
804
|
-
//
|
|
805
|
-
//
|
|
806
|
-
// merge sentinel of a user-provided list.
|
|
798
|
+
// Worklet parsing is opt-in: unset falls back to `futureDefaults` and
|
|
799
|
+
// `false` disables it. Not defaulted in `config/defaults.js`, which
|
|
800
|
+
// would splice into a user list's `"..."` sentinel.
|
|
807
801
|
const workletOption =
|
|
808
802
|
parserOptions.worklet === undefined
|
|
809
803
|
? this._workletDefault
|
|
@@ -131,17 +131,17 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
|
|
|
131
131
|
);
|
|
132
132
|
const chunk = entrypoint.getEntrypointChunk();
|
|
133
133
|
|
|
134
|
-
//
|
|
135
|
-
// import.meta.url)` form
|
|
136
|
-
//
|
|
137
|
-
//
|
|
138
|
-
//
|
|
134
|
+
// WHY: ESM module output emits the analyzable
|
|
135
|
+
// `new URL("./worker.<name>.js", import.meta.url)` form — a literal specifier,
|
|
136
|
+
// no runtime helpers — so other bundlers and webpack itself can statically
|
|
137
|
+
// follow the worker. A resource hint does not block it: the `<link>` is
|
|
138
|
+
// emitted at chunk startup instead of wrapping the href, which would turn the
|
|
139
|
+
// specifier into a non-analyzable expression.
|
|
139
140
|
const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
|
|
140
141
|
dep.options.publicPath,
|
|
141
142
|
chunk,
|
|
142
143
|
templateContext.module,
|
|
143
|
-
chunkGraph
|
|
144
|
-
runtimeRequirements
|
|
144
|
+
chunkGraph
|
|
145
145
|
);
|
|
146
146
|
|
|
147
147
|
if (analyzableSpecifier !== null) {
|
|
@@ -136,16 +136,14 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
|
|
|
136
136
|
const runtimeChunkId =
|
|
137
137
|
runtimeChunk && runtimeChunk.id !== null ? runtimeChunk.id : null;
|
|
138
138
|
|
|
139
|
-
//
|
|
140
|
-
// import.meta.url)
|
|
141
|
-
//
|
|
142
|
-
// splits via native `import`, so only the entry chunk is referenced.
|
|
139
|
+
// ESM output emits the analyzable `new URL("./worklet.<name>.js",
|
|
140
|
+
// import.meta.url)`, which another bundler can follow statically. Only the
|
|
141
|
+
// entry chunk is named, its splits being linked by native `import`.
|
|
143
142
|
const analyzableSpecifier = runtimeTemplate.getAnalyzableWorkerUrl(
|
|
144
143
|
dep.options.publicPath,
|
|
145
144
|
entryChunk,
|
|
146
145
|
module,
|
|
147
|
-
chunkGraph
|
|
148
|
-
runtimeRequirements
|
|
146
|
+
chunkGraph
|
|
149
147
|
);
|
|
150
148
|
if (analyzableSpecifier !== null) {
|
|
151
149
|
source.replace(
|
|
@@ -197,11 +195,9 @@ WorkletDependency.Template = class WorkletDependencyTemplate extends (
|
|
|
197
195
|
return;
|
|
198
196
|
}
|
|
199
197
|
|
|
200
|
-
// A worklet
|
|
201
|
-
//
|
|
202
|
-
//
|
|
203
|
-
// chunks pushed before it and runs entry startup with every module present
|
|
204
|
-
// (see ImportScriptsChunkLoadingRuntimeModule).
|
|
198
|
+
// A worklet loads no chunks at runtime, so every reachable one is pre-added
|
|
199
|
+
// from the calling scope. The runtime chunk goes last, installing what came
|
|
200
|
+
// before it and running startup with every module present.
|
|
205
201
|
/** @type {(string | number)[]} */
|
|
206
202
|
const restChunkIds = [];
|
|
207
203
|
for (const chunk of referencedChunks) {
|
|
@@ -242,6 +242,7 @@ class DelegatedModule extends Module {
|
|
|
242
242
|
updateHash(hash, context) {
|
|
243
243
|
hash.update(this.delegationType);
|
|
244
244
|
hash.update(JSON.stringify(this.request));
|
|
245
|
+
hash.update(JSON.stringify(this.delegateData));
|
|
245
246
|
super.updateHash(hash, context);
|
|
246
247
|
}
|
|
247
248
|
|
|
@@ -299,7 +300,23 @@ class DelegatedModule extends Module {
|
|
|
299
300
|
this.delegationType = m.delegationType;
|
|
300
301
|
this.userRequest = m.userRequest;
|
|
301
302
|
this.originalRequest = m.originalRequest;
|
|
302
|
-
|
|
303
|
+
const next = m.delegateData;
|
|
304
|
+
// cleanupForCache clears delegateData; compare surviving build products instead.
|
|
305
|
+
if (this.buildMeta) {
|
|
306
|
+
const nextMeta = { ...next.buildMeta };
|
|
307
|
+
const exportsDependency = this.dependencies[1];
|
|
308
|
+
const builtExports =
|
|
309
|
+
exportsDependency instanceof StaticExportsDependency
|
|
310
|
+
? exportsDependency.exports
|
|
311
|
+
: undefined;
|
|
312
|
+
if (
|
|
313
|
+
JSON.stringify(this.buildMeta) !== JSON.stringify(nextMeta) ||
|
|
314
|
+
JSON.stringify(builtExports) !== JSON.stringify(next.exports || true)
|
|
315
|
+
) {
|
|
316
|
+
this.buildMeta = undefined;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
this.delegateData = next;
|
|
303
320
|
}
|
|
304
321
|
|
|
305
322
|
/**
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
const ExternalModuleFactoryPlugin = require("../ExternalModuleFactoryPlugin");
|
|
9
9
|
const DelegatedSourceDependency = require("../dependencies/DelegatedSourceDependency");
|
|
10
10
|
const WebpackError = require("../errors/WebpackError");
|
|
11
|
-
const { makePathsRelative } = require("../util/identifier");
|
|
11
|
+
const { fileUrlToPath, makePathsRelative } = require("../util/identifier");
|
|
12
12
|
const parseJson = require("../util/parseJson");
|
|
13
13
|
const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
|
|
14
14
|
|
|
@@ -72,12 +72,13 @@ class DllReferencePlugin {
|
|
|
72
72
|
if ("manifest" in this.options) {
|
|
73
73
|
const manifest = this.options.manifest;
|
|
74
74
|
if (typeof manifest === "string") {
|
|
75
|
+
const manifestPath = fileUrlToPath(manifest);
|
|
75
76
|
/** @type {InputFileSystem} */
|
|
76
|
-
(compiler.inputFileSystem).readFile(
|
|
77
|
+
(compiler.inputFileSystem).readFile(manifestPath, (err, result) => {
|
|
77
78
|
if (err) return callback(err);
|
|
78
79
|
/** @type {CompilationDataItem} */
|
|
79
80
|
const data = {
|
|
80
|
-
path:
|
|
81
|
+
path: manifestPath,
|
|
81
82
|
data: undefined,
|
|
82
83
|
error: undefined
|
|
83
84
|
};
|
|
@@ -93,13 +94,13 @@ class DllReferencePlugin {
|
|
|
93
94
|
} catch (parseErr) {
|
|
94
95
|
// Store the error in the params so that it can
|
|
95
96
|
// be added as a compilation error later on.
|
|
96
|
-
const
|
|
97
|
+
const relativePath = makePathsRelative(
|
|
97
98
|
compiler.context,
|
|
98
|
-
|
|
99
|
+
manifestPath,
|
|
99
100
|
compiler.root
|
|
100
101
|
);
|
|
101
102
|
data.error = new DllManifestError(
|
|
102
|
-
|
|
103
|
+
relativePath,
|
|
103
104
|
/** @type {Error} */ (parseErr).message
|
|
104
105
|
);
|
|
105
106
|
}
|
|
@@ -153,7 +154,9 @@ class DllReferencePlugin {
|
|
|
153
154
|
source,
|
|
154
155
|
type: this.options.type,
|
|
155
156
|
scope: this.options.scope,
|
|
156
|
-
context: this.options.context
|
|
157
|
+
context: this.options.context
|
|
158
|
+
? fileUrlToPath(this.options.context)
|
|
159
|
+
: compiler.context,
|
|
157
160
|
content:
|
|
158
161
|
/** @type {DllReferencePluginOptionsContent} */
|
|
159
162
|
(resolvedContent),
|
|
@@ -176,7 +179,7 @@ class DllReferencePlugin {
|
|
|
176
179
|
/** @type {DllManifestError} */ (data.error)
|
|
177
180
|
);
|
|
178
181
|
}
|
|
179
|
-
compilation.fileDependencies.add(manifest);
|
|
182
|
+
compilation.fileDependencies.add(fileUrlToPath(manifest));
|
|
180
183
|
}
|
|
181
184
|
}
|
|
182
185
|
});
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const asyncLib = require("neo-async");
|
|
9
8
|
const EntryDependency = require("../dependencies/EntryDependency");
|
|
10
9
|
const { someInIterable } = require("../util/IterableHelpers");
|
|
10
|
+
const asyncLib = require("../util/async");
|
|
11
11
|
const { compareModulesById } = require("../util/comparators");
|
|
12
12
|
const { dirname, mkdirp } = require("../util/fs");
|
|
13
13
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @typedef {object} BailoutDetails
|
|
12
|
+
* @property {string} reason what keeps the runtime form, as the code generation recorded it
|
|
13
|
+
* @property {string[]} modules the modules it was recorded on, as many as are printed
|
|
14
|
+
* @property {number} count how many modules it was recorded on in all
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
class AnalyzableBailoutsWarning extends WebpackError {
|
|
18
|
+
/**
|
|
19
|
+
* Creates an instance of AnalyzableBailoutsWarning.
|
|
20
|
+
* @param {BailoutDetails[]} bailouts the reasons found, the most frequent first
|
|
21
|
+
* @param {number} references how many module and reason pairs there are
|
|
22
|
+
*/
|
|
23
|
+
constructor(bailouts, references) {
|
|
24
|
+
const list = bailouts
|
|
25
|
+
.map((it) => {
|
|
26
|
+
const more = it.count - it.modules.length;
|
|
27
|
+
const names = `${it.modules.join(", ")}${more > 0 ? `, and ${more} more` : ""}`;
|
|
28
|
+
return `\n ${it.reason}\n ${names}`;
|
|
29
|
+
})
|
|
30
|
+
.join("");
|
|
31
|
+
|
|
32
|
+
super(
|
|
33
|
+
`analyzable ESM output: ${references} ${references === 1 ? "reference keeps" : "references keep"} the runtime form:${list}\nA bundler reading this output cannot follow such a reference without running webpack's runtime. Each reason names the setting that keeps it; changing that setting lets the reference be written as a literal import() or new URL().\nFor more info visit https://webpack.js.org/configuration/output/#outputmodule`
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
/** @type {string} */
|
|
37
|
+
this.name = "AnalyzableBailoutsWarning";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = AnalyzableBailoutsWarning;
|
|
@@ -12,6 +12,7 @@ const WebpackError = require("./WebpackError");
|
|
|
12
12
|
* @typedef {object} DuplicateModuleDetails
|
|
13
13
|
* @property {string} name
|
|
14
14
|
* @property {number} chunks how many chunks carry a copy
|
|
15
|
+
* @property {string[]} entrypoints the entrypoints those chunks belong to, when more than one
|
|
15
16
|
* @property {number} wasted bytes the extra copies cost
|
|
16
17
|
*/
|
|
17
18
|
|
|
@@ -23,18 +24,22 @@ class DuplicateModulesWarning extends WebpackError {
|
|
|
23
24
|
*/
|
|
24
25
|
constructor(modules, wasted) {
|
|
25
26
|
const list = modules
|
|
26
|
-
.map(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
.map((module) => {
|
|
28
|
+
// Which entrypoints pay for it is the actionable part, so it leads
|
|
29
|
+
// where the copies are spread across more than one.
|
|
30
|
+
const where =
|
|
31
|
+
module.entrypoints.length > 1
|
|
32
|
+
? `in ${module.entrypoints.join(", ")}, ${module.chunks} chunks`
|
|
33
|
+
: `in ${module.chunks} chunks`;
|
|
34
|
+
|
|
35
|
+
return `\n ${module.name} (${where}, ${formatSize(module.wasted)} extra)`;
|
|
36
|
+
})
|
|
32
37
|
.join("");
|
|
33
38
|
|
|
34
39
|
super(
|
|
35
40
|
`duplicate modules: copies of the same module across chunks add ${formatSize(
|
|
36
41
|
wasted
|
|
37
|
-
)}:${list}\nA module reached from several chunks is emitted into each of them unless a shared chunk holds it. 'optimization.splitChunks' can pull it into one.\nFor more info visit https://webpack.js.org/plugins/split-chunks-plugin/`
|
|
42
|
+
)}:${list}\nA module reached from several chunks is emitted into each of them unless a shared chunk holds it. 'optimization.splitChunks' can pull it into one, with 'chunks: "all"' where the copies are in different entrypoints.\nFor more info visit https://webpack.js.org/plugins/split-chunks-plugin/`
|
|
38
43
|
);
|
|
39
44
|
|
|
40
45
|
/** @type {string} */
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const WebpackError = require("./WebpackError");
|
|
9
|
+
|
|
10
|
+
class EmptyCopyPatternWarning extends WebpackError {
|
|
11
|
+
/**
|
|
12
|
+
* Creates an instance of EmptyCopyPatternWarning.
|
|
13
|
+
* @param {string} from the `from` of the pattern as written in the configuration
|
|
14
|
+
* @param {string} glob the glob `from` was resolved to
|
|
15
|
+
*/
|
|
16
|
+
constructor(from, glob) {
|
|
17
|
+
super(
|
|
18
|
+
`The '${from}' pattern of 'output.copy' copied no file.\nIt resolved to '${glob}', which matches nothing on disk — usually a typo, a path relative to the wrong directory, or a directory a previous build step was supposed to create.\nSilence it with 'ignoreWarnings' when the pattern is optional.`
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
/** @type {string} */
|
|
22
|
+
this.name = "EmptyCopyPatternWarning";
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = EmptyCopyPatternWarning;
|