webpack 5.71.0 → 5.73.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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/lib/BannerPlugin.js +3 -1
- package/lib/ChunkGraph.js +93 -6
- package/lib/Compilation.js +5 -1
- package/lib/Compiler.js +1 -1
- package/lib/DllReferencePlugin.js +1 -1
- package/lib/ExportsInfo.js +1 -1
- package/lib/Module.js +1 -0
- package/lib/NodeStuffPlugin.js +1 -1
- package/lib/NormalModule.js +4 -3
- package/lib/RuntimePlugin.js +7 -0
- package/lib/asset/AssetGenerator.js +36 -9
- package/lib/asset/AssetParser.js +1 -0
- package/lib/asset/AssetSourceGenerator.js +31 -6
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/cache/PackFileCacheStrategy.js +8 -4
- package/lib/config/defaults.js +12 -4
- package/lib/container/RemoteRuntimeModule.js +8 -7
- package/lib/dependencies/CommonJsImportsParserPlugin.js +342 -61
- package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
- package/lib/dependencies/CommonJsRequireDependency.js +2 -1
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +18 -5
- package/lib/dependencies/ContextElementDependency.js +0 -16
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +35 -3
- package/lib/dependencies/ImportParserPlugin.js +31 -25
- package/lib/dependencies/JsonExportsDependency.js +17 -21
- package/lib/dependencies/LoaderDependency.js +13 -0
- package/lib/dependencies/LoaderImportDependency.js +13 -0
- package/lib/dependencies/ModuleDependency.js +11 -1
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +2 -1
- package/lib/dependencies/URLPlugin.js +21 -0
- package/lib/index.js +1 -0
- package/lib/javascript/JavascriptParser.js +40 -19
- package/lib/json/JsonData.js +8 -0
- package/lib/json/JsonParser.js +4 -6
- package/lib/optimize/ConcatenatedModule.js +2 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +21 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +34 -58
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/sharing/ProvideSharedPlugin.js +1 -2
- package/package.json +3 -3
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +37 -0
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/types.d.ts +51 -3
package/lib/BannerPlugin.js
CHANGED
@@ -106,7 +106,9 @@ class BannerPlugin {
|
|
106
106
|
compilation.updateAsset(file, old => {
|
107
107
|
let cached = cache.get(old);
|
108
108
|
if (!cached || cached.comment !== comment) {
|
109
|
-
const source =
|
109
|
+
const source = options.footer
|
110
|
+
? new ConcatSource(old, "\n", comment)
|
111
|
+
: new ConcatSource(comment, "\n", old);
|
110
112
|
cache.set(old, { source, comment });
|
111
113
|
return source;
|
112
114
|
}
|
package/lib/ChunkGraph.js
CHANGED
@@ -85,14 +85,17 @@ const getModuleRuntimes = chunks => {
|
|
85
85
|
};
|
86
86
|
|
87
87
|
/**
|
88
|
-
* @param {
|
89
|
-
* @returns {Map<string, SortableSet<Module>>} modules by source type
|
88
|
+
* @param {WeakMap<Module, Set<string>> | undefined} sourceTypesByModule sourceTypesByModule
|
89
|
+
* @returns {function (SortableSet<Module>): Map<string, SortableSet<Module>>} modules by source type
|
90
90
|
*/
|
91
|
-
const modulesBySourceType = set => {
|
91
|
+
const modulesBySourceType = sourceTypesByModule => set => {
|
92
92
|
/** @type {Map<string, SortableSet<Module>>} */
|
93
93
|
const map = new Map();
|
94
94
|
for (const module of set) {
|
95
|
-
|
95
|
+
const sourceTypes =
|
96
|
+
(sourceTypesByModule && sourceTypesByModule.get(module)) ||
|
97
|
+
module.getSourceTypes();
|
98
|
+
for (const sourceType of sourceTypes) {
|
96
99
|
let innerSet = map.get(sourceType);
|
97
100
|
if (innerSet === undefined) {
|
98
101
|
innerSet = new SortableSet();
|
@@ -110,6 +113,7 @@ const modulesBySourceType = set => {
|
|
110
113
|
}
|
111
114
|
return map;
|
112
115
|
};
|
116
|
+
const defaultModulesBySourceType = modulesBySourceType(undefined);
|
113
117
|
|
114
118
|
/** @type {WeakMap<Function, any>} */
|
115
119
|
const createOrderedArrayFunctionMap = new WeakMap();
|
@@ -201,6 +205,8 @@ class ChunkGraphChunk {
|
|
201
205
|
constructor() {
|
202
206
|
/** @type {SortableSet<Module>} */
|
203
207
|
this.modules = new SortableSet();
|
208
|
+
/** @type {WeakMap<Module, Set<string>> | undefined} */
|
209
|
+
this.sourceTypesByModule = undefined;
|
204
210
|
/** @type {Map<Module, Entrypoint>} */
|
205
211
|
this.entryModules = new Map();
|
206
212
|
/** @type {SortableSet<RuntimeModule>} */
|
@@ -213,6 +219,8 @@ class ChunkGraphChunk {
|
|
213
219
|
this.runtimeRequirements = undefined;
|
214
220
|
/** @type {Set<string>} */
|
215
221
|
this.runtimeRequirementsInTree = new Set();
|
222
|
+
|
223
|
+
this._modulesBySourceType = defaultModulesBySourceType;
|
216
224
|
}
|
217
225
|
}
|
218
226
|
|
@@ -315,6 +323,8 @@ class ChunkGraph {
|
|
315
323
|
const cgm = this._getChunkGraphModule(module);
|
316
324
|
const cgc = this._getChunkGraphChunk(chunk);
|
317
325
|
cgc.modules.delete(module);
|
326
|
+
// No need to invalidate cgc._modulesBySourceType because we modified cgc.modules anyway
|
327
|
+
if (cgc.sourceTypesByModule) cgc.sourceTypesByModule.delete(module);
|
318
328
|
cgm.chunks.delete(chunk);
|
319
329
|
}
|
320
330
|
|
@@ -568,11 +578,84 @@ class ChunkGraph {
|
|
568
578
|
getChunkModulesIterableBySourceType(chunk, sourceType) {
|
569
579
|
const cgc = this._getChunkGraphChunk(chunk);
|
570
580
|
const modulesWithSourceType = cgc.modules
|
571
|
-
.getFromUnorderedCache(
|
581
|
+
.getFromUnorderedCache(cgc._modulesBySourceType)
|
572
582
|
.get(sourceType);
|
573
583
|
return modulesWithSourceType;
|
574
584
|
}
|
575
585
|
|
586
|
+
/**
|
587
|
+
* @param {Chunk} chunk chunk
|
588
|
+
* @param {Module} module chunk module
|
589
|
+
* @param {Set<string>} sourceTypes source types
|
590
|
+
*/
|
591
|
+
setChunkModuleSourceTypes(chunk, module, sourceTypes) {
|
592
|
+
const cgc = this._getChunkGraphChunk(chunk);
|
593
|
+
if (cgc.sourceTypesByModule === undefined) {
|
594
|
+
cgc.sourceTypesByModule = new WeakMap();
|
595
|
+
}
|
596
|
+
cgc.sourceTypesByModule.set(module, sourceTypes);
|
597
|
+
// Update cgc._modulesBySourceType to invalidate the cache
|
598
|
+
cgc._modulesBySourceType = modulesBySourceType(cgc.sourceTypesByModule);
|
599
|
+
}
|
600
|
+
|
601
|
+
/**
|
602
|
+
* @param {Chunk} chunk chunk
|
603
|
+
* @param {Module} module chunk module
|
604
|
+
* @returns {Set<string>} source types
|
605
|
+
*/
|
606
|
+
getChunkModuleSourceTypes(chunk, module) {
|
607
|
+
const cgc = this._getChunkGraphChunk(chunk);
|
608
|
+
if (cgc.sourceTypesByModule === undefined) {
|
609
|
+
return module.getSourceTypes();
|
610
|
+
}
|
611
|
+
return cgc.sourceTypesByModule.get(module) || module.getSourceTypes();
|
612
|
+
}
|
613
|
+
|
614
|
+
/**
|
615
|
+
* @param {Module} module module
|
616
|
+
* @returns {Set<string>} source types
|
617
|
+
*/
|
618
|
+
getModuleSourceTypes(module) {
|
619
|
+
return (
|
620
|
+
this._getOverwrittenModuleSourceTypes(module) || module.getSourceTypes()
|
621
|
+
);
|
622
|
+
}
|
623
|
+
|
624
|
+
/**
|
625
|
+
* @param {Module} module module
|
626
|
+
* @returns {Set<string> | undefined} source types
|
627
|
+
*/
|
628
|
+
_getOverwrittenModuleSourceTypes(module) {
|
629
|
+
let newSet = false;
|
630
|
+
let sourceTypes;
|
631
|
+
for (const chunk of this.getModuleChunksIterable(module)) {
|
632
|
+
const cgc = this._getChunkGraphChunk(chunk);
|
633
|
+
if (cgc.sourceTypesByModule === undefined) return;
|
634
|
+
const st = cgc.sourceTypesByModule.get(module);
|
635
|
+
if (st === undefined) return;
|
636
|
+
if (!sourceTypes) {
|
637
|
+
sourceTypes = st;
|
638
|
+
continue;
|
639
|
+
} else if (!newSet) {
|
640
|
+
for (const type of st) {
|
641
|
+
if (!newSet) {
|
642
|
+
if (!sourceTypes.has(type)) {
|
643
|
+
newSet = true;
|
644
|
+
sourceTypes = new Set(sourceTypes);
|
645
|
+
sourceTypes.add(type);
|
646
|
+
}
|
647
|
+
} else {
|
648
|
+
sourceTypes.add(type);
|
649
|
+
}
|
650
|
+
}
|
651
|
+
} else {
|
652
|
+
for (const type of st) sourceTypes.add(type);
|
653
|
+
}
|
654
|
+
}
|
655
|
+
|
656
|
+
return sourceTypes;
|
657
|
+
}
|
658
|
+
|
576
659
|
/**
|
577
660
|
* @param {Chunk} chunk the chunk
|
578
661
|
* @param {function(Module, Module): -1|0|1} comparator comparator function
|
@@ -593,7 +676,7 @@ class ChunkGraph {
|
|
593
676
|
getOrderedChunkModulesIterableBySourceType(chunk, sourceType, comparator) {
|
594
677
|
const cgc = this._getChunkGraphChunk(chunk);
|
595
678
|
const modulesWithSourceType = cgc.modules
|
596
|
-
.getFromUnorderedCache(
|
679
|
+
.getFromUnorderedCache(cgc._modulesBySourceType)
|
597
680
|
.get(sourceType);
|
598
681
|
if (modulesWithSourceType === undefined) return undefined;
|
599
682
|
modulesWithSourceType.sortWith(comparator);
|
@@ -1473,6 +1556,10 @@ Caller might not support runtime-dependent code generation (opt-out via optimiza
|
|
1473
1556
|
const graphHash = cgm.graphHashes.provide(runtime, () => {
|
1474
1557
|
const hash = createHash(this._hashFunction);
|
1475
1558
|
hash.update(`${cgm.id}${this.moduleGraph.isAsync(module)}`);
|
1559
|
+
const sourceTypes = this._getOverwrittenModuleSourceTypes(module);
|
1560
|
+
if (sourceTypes !== undefined) {
|
1561
|
+
for (const type of sourceTypes) hash.update(type);
|
1562
|
+
}
|
1476
1563
|
this.moduleGraph.getExportsInfo(module).updateHash(hash, runtime);
|
1477
1564
|
return BigInt(`0x${/** @type {string} */ (hash.digest("hex"))}`);
|
1478
1565
|
});
|
package/lib/Compilation.js
CHANGED
@@ -4241,7 +4241,11 @@ This prevents using hashes of each other and should be avoided.`);
|
|
4241
4241
|
if (!isSourceEqual(this.assets[file], source)) {
|
4242
4242
|
this.errors.push(
|
4243
4243
|
new WebpackError(
|
4244
|
-
`Conflict: Multiple assets emit different content to the same filename ${file}
|
4244
|
+
`Conflict: Multiple assets emit different content to the same filename ${file}${
|
4245
|
+
assetInfo.sourceFilename
|
4246
|
+
? `. Original source ${assetInfo.sourceFilename}`
|
4247
|
+
: ""
|
4248
|
+
}`
|
4245
4249
|
)
|
4246
4250
|
);
|
4247
4251
|
this.assets[file] = source;
|
package/lib/Compiler.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
-
const parseJson = require("json-parse-better-errors");
|
8
|
+
const parseJson = require("json-parse-even-better-errors");
|
9
9
|
const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
|
10
10
|
const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
|
11
11
|
const WebpackError = require("./WebpackError");
|
package/lib/ExportsInfo.js
CHANGED
@@ -584,7 +584,7 @@ class ExportsInfo {
|
|
584
584
|
if (info.exportsInfo && name.length > 1) {
|
585
585
|
return info.exportsInfo.isExportProvided(name.slice(1));
|
586
586
|
}
|
587
|
-
return info.provided;
|
587
|
+
return info.provided ? name.length === 1 || undefined : info.provided;
|
588
588
|
}
|
589
589
|
const info = this.getReadOnlyExportInfo(name);
|
590
590
|
return info.provided;
|
package/lib/Module.js
CHANGED
@@ -60,6 +60,7 @@ const makeSerializable = require("./util/makeSerializable");
|
|
60
60
|
* @property {ConcatenationScope=} concatenationScope when in concatenated module, information about other concatenated modules
|
61
61
|
* @property {CodeGenerationResults} codeGenerationResults code generation results of other modules (need to have a codeGenerationDependency to use that)
|
62
62
|
* @property {Compilation=} compilation the compilation
|
63
|
+
* @property {ReadonlySet<string>=} sourceTypes source types
|
63
64
|
*/
|
64
65
|
|
65
66
|
/**
|
package/lib/NodeStuffPlugin.js
CHANGED
@@ -64,7 +64,7 @@ class NodeStuffPlugin {
|
|
64
64
|
new NodeStuffInWebError(
|
65
65
|
dep.loc,
|
66
66
|
"global",
|
67
|
-
"The global namespace object is Node.js feature and
|
67
|
+
"The global namespace object is a Node.js feature and isn't available in browsers."
|
68
68
|
)
|
69
69
|
);
|
70
70
|
}
|
package/lib/NormalModule.js
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
-
const parseJson = require("json-parse-better-errors");
|
8
|
+
const parseJson = require("json-parse-even-better-errors");
|
9
9
|
const { getContext, runLoaders } = require("loader-runner");
|
10
10
|
const querystring = require("querystring");
|
11
11
|
const { HookMap, SyncHook, AsyncSeriesBailHook } = require("tapable");
|
@@ -1176,7 +1176,8 @@ class NormalModule extends Module {
|
|
1176
1176
|
chunkGraph,
|
1177
1177
|
runtime,
|
1178
1178
|
concatenationScope,
|
1179
|
-
codeGenerationResults
|
1179
|
+
codeGenerationResults,
|
1180
|
+
sourceTypes
|
1180
1181
|
}) {
|
1181
1182
|
/** @type {Set<string>} */
|
1182
1183
|
const runtimeRequirements = new Set();
|
@@ -1195,7 +1196,7 @@ class NormalModule extends Module {
|
|
1195
1196
|
};
|
1196
1197
|
|
1197
1198
|
const sources = new Map();
|
1198
|
-
for (const type of
|
1199
|
+
for (const type of sourceTypes || chunkGraph.getModuleSourceTypes(this)) {
|
1199
1200
|
const source = this.error
|
1200
1201
|
? new RawSource(
|
1201
1202
|
"throw new Error(" + JSON.stringify(this.error.message) + ");"
|
package/lib/RuntimePlugin.js
CHANGED
@@ -26,6 +26,7 @@ const GlobalRuntimeModule = require("./runtime/GlobalRuntimeModule");
|
|
26
26
|
const HasOwnPropertyRuntimeModule = require("./runtime/HasOwnPropertyRuntimeModule");
|
27
27
|
const LoadScriptRuntimeModule = require("./runtime/LoadScriptRuntimeModule");
|
28
28
|
const MakeNamespaceObjectRuntimeModule = require("./runtime/MakeNamespaceObjectRuntimeModule");
|
29
|
+
const NonceRuntimeModule = require("./runtime/NonceRuntimeModule");
|
29
30
|
const OnChunksLoadedRuntimeModule = require("./runtime/OnChunksLoadedRuntimeModule");
|
30
31
|
const PublicPathRuntimeModule = require("./runtime/PublicPathRuntimeModule");
|
31
32
|
const RelativeUrlRuntimeModule = require("./runtime/RelativeUrlRuntimeModule");
|
@@ -431,6 +432,12 @@ class RuntimePlugin {
|
|
431
432
|
return true;
|
432
433
|
}
|
433
434
|
});
|
435
|
+
compilation.hooks.runtimeRequirementInTree
|
436
|
+
.for(RuntimeGlobals.scriptNonce)
|
437
|
+
.tap("RuntimePlugin", chunk => {
|
438
|
+
compilation.addRuntimeModule(chunk, new NonceRuntimeModule());
|
439
|
+
return true;
|
440
|
+
});
|
434
441
|
// TODO webpack 6: remove CompatRuntimeModule
|
435
442
|
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
436
443
|
"RuntimePlugin",
|
@@ -8,6 +8,7 @@
|
|
8
8
|
const mimeTypes = require("mime-types");
|
9
9
|
const path = require("path");
|
10
10
|
const { RawSource } = require("webpack-sources");
|
11
|
+
const ConcatenationScope = require("../ConcatenationScope");
|
11
12
|
const Generator = require("../Generator");
|
12
13
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
13
14
|
const createHash = require("../util/createHash");
|
@@ -23,6 +24,7 @@ const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
|
|
23
24
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
24
25
|
/** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
|
25
26
|
/** @typedef {import("../Module")} Module */
|
27
|
+
/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
|
26
28
|
/** @typedef {import("../NormalModule")} NormalModule */
|
27
29
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
28
30
|
/** @typedef {import("../util/Hash")} Hash */
|
@@ -145,6 +147,15 @@ class AssetGenerator extends Generator {
|
|
145
147
|
).replace(/^\.\//, "");
|
146
148
|
}
|
147
149
|
|
150
|
+
/**
|
151
|
+
* @param {NormalModule} module module for which the bailout reason should be determined
|
152
|
+
* @param {ConcatenationBailoutReasonContext} context context
|
153
|
+
* @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
|
154
|
+
*/
|
155
|
+
getConcatenationBailoutReason(module, context) {
|
156
|
+
return undefined;
|
157
|
+
}
|
158
|
+
|
148
159
|
/**
|
149
160
|
* @param {NormalModule} module module
|
150
161
|
* @returns {string} mime type
|
@@ -198,14 +209,21 @@ class AssetGenerator extends Generator {
|
|
198
209
|
*/
|
199
210
|
generate(
|
200
211
|
module,
|
201
|
-
{
|
212
|
+
{
|
213
|
+
runtime,
|
214
|
+
concatenationScope,
|
215
|
+
chunkGraph,
|
216
|
+
runtimeTemplate,
|
217
|
+
runtimeRequirements,
|
218
|
+
type,
|
219
|
+
getData
|
220
|
+
}
|
202
221
|
) {
|
203
222
|
switch (type) {
|
204
223
|
case "asset":
|
205
224
|
return module.originalSource();
|
206
225
|
default: {
|
207
|
-
|
208
|
-
|
226
|
+
let content;
|
209
227
|
const originalSource = module.originalSource();
|
210
228
|
if (module.buildInfo.dataUrl) {
|
211
229
|
let encodedSource;
|
@@ -255,11 +273,7 @@ class AssetGenerator extends Generator {
|
|
255
273
|
}
|
256
274
|
const data = getData();
|
257
275
|
data.set("url", Buffer.from(encodedSource));
|
258
|
-
|
259
|
-
`${RuntimeGlobals.module}.exports = ${JSON.stringify(
|
260
|
-
encodedSource
|
261
|
-
)};`
|
262
|
-
);
|
276
|
+
content = JSON.stringify(encodedSource);
|
263
277
|
} else {
|
264
278
|
const assetModuleFilename =
|
265
279
|
this.filename || runtimeTemplate.outputOptions.assetModuleFilename;
|
@@ -343,9 +357,22 @@ class AssetGenerator extends Generator {
|
|
343
357
|
data.set("filename", filename);
|
344
358
|
data.set("assetInfo", assetInfo);
|
345
359
|
}
|
360
|
+
content = assetPath;
|
361
|
+
}
|
346
362
|
|
363
|
+
if (concatenationScope) {
|
364
|
+
concatenationScope.registerNamespaceExport(
|
365
|
+
ConcatenationScope.NAMESPACE_OBJECT_EXPORT
|
366
|
+
);
|
367
|
+
return new RawSource(
|
368
|
+
`${runtimeTemplate.supportsConst() ? "const" : "var"} ${
|
369
|
+
ConcatenationScope.NAMESPACE_OBJECT_EXPORT
|
370
|
+
} = ${content};`
|
371
|
+
);
|
372
|
+
} else {
|
373
|
+
runtimeRequirements.add(RuntimeGlobals.module);
|
347
374
|
return new RawSource(
|
348
|
-
`${RuntimeGlobals.module}.exports = ${
|
375
|
+
`${RuntimeGlobals.module}.exports = ${content};`
|
349
376
|
);
|
350
377
|
}
|
351
378
|
}
|
package/lib/asset/AssetParser.js
CHANGED
@@ -31,6 +31,7 @@ class AssetParser extends Parser {
|
|
31
31
|
}
|
32
32
|
state.module.buildInfo.strict = true;
|
33
33
|
state.module.buildMeta.exportsType = "default";
|
34
|
+
state.module.buildMeta.defaultObject = false;
|
34
35
|
|
35
36
|
if (typeof this.dataUrlCondition === "function") {
|
36
37
|
state.module.buildInfo.dataUrl = this.dataUrlCondition(source, {
|
@@ -6,11 +6,13 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const { RawSource } = require("webpack-sources");
|
9
|
+
const ConcatenationScope = require("../ConcatenationScope");
|
9
10
|
const Generator = require("../Generator");
|
10
11
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
11
12
|
|
12
13
|
/** @typedef {import("webpack-sources").Source} Source */
|
13
14
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
15
|
+
/** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
|
14
16
|
/** @typedef {import("../NormalModule")} NormalModule */
|
15
17
|
|
16
18
|
const TYPES = new Set(["javascript"]);
|
@@ -21,9 +23,10 @@ class AssetSourceGenerator extends Generator {
|
|
21
23
|
* @param {GenerateContext} generateContext context for generate
|
22
24
|
* @returns {Source} generated code
|
23
25
|
*/
|
24
|
-
generate(
|
25
|
-
|
26
|
-
|
26
|
+
generate(
|
27
|
+
module,
|
28
|
+
{ concatenationScope, chunkGraph, runtimeTemplate, runtimeRequirements }
|
29
|
+
) {
|
27
30
|
const originalSource = module.originalSource();
|
28
31
|
|
29
32
|
if (!originalSource) {
|
@@ -38,9 +41,31 @@ class AssetSourceGenerator extends Generator {
|
|
38
41
|
} else {
|
39
42
|
encodedSource = content.toString("utf-8");
|
40
43
|
}
|
41
|
-
|
42
|
-
|
43
|
-
)
|
44
|
+
|
45
|
+
let sourceContent;
|
46
|
+
if (concatenationScope) {
|
47
|
+
concatenationScope.registerNamespaceExport(
|
48
|
+
ConcatenationScope.NAMESPACE_OBJECT_EXPORT
|
49
|
+
);
|
50
|
+
sourceContent = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
|
51
|
+
ConcatenationScope.NAMESPACE_OBJECT_EXPORT
|
52
|
+
} = ${JSON.stringify(encodedSource)};`;
|
53
|
+
} else {
|
54
|
+
runtimeRequirements.add(RuntimeGlobals.module);
|
55
|
+
sourceContent = `${RuntimeGlobals.module}.exports = ${JSON.stringify(
|
56
|
+
encodedSource
|
57
|
+
)};`;
|
58
|
+
}
|
59
|
+
return new RawSource(sourceContent);
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* @param {NormalModule} module module for which the bailout reason should be determined
|
64
|
+
* @param {ConcatenationBailoutReasonContext} context context
|
65
|
+
* @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
|
66
|
+
*/
|
67
|
+
getConcatenationBailoutReason(module, context) {
|
68
|
+
return undefined;
|
44
69
|
}
|
45
70
|
|
46
71
|
/**
|
@@ -639,10 +639,14 @@ class PackContentItems {
|
|
639
639
|
} catch (e) {
|
640
640
|
rollback(s);
|
641
641
|
if (e === NOT_SERIALIZABLE) continue;
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
642
|
+
const msg = "Skipped not serializable cache item";
|
643
|
+
if (e.message.includes("ModuleBuildError")) {
|
644
|
+
logger.log(`${msg} (in build error): ${e.message}`);
|
645
|
+
logger.debug(`${msg} '${key}' (in build error): ${e.stack}`);
|
646
|
+
} else {
|
647
|
+
logger.warn(`${msg}: ${e.message}`);
|
648
|
+
logger.debug(`${msg} '${key}': ${e.stack}`);
|
649
|
+
}
|
646
650
|
}
|
647
651
|
}
|
648
652
|
write(null);
|
package/lib/config/defaults.js
CHANGED
@@ -190,7 +190,8 @@ const applyWebpackOptionsDefaults = options => {
|
|
190
190
|
syncWebAssembly: options.experiments.syncWebAssembly,
|
191
191
|
asyncWebAssembly: options.experiments.asyncWebAssembly,
|
192
192
|
css: options.experiments.css,
|
193
|
-
futureDefaults
|
193
|
+
futureDefaults,
|
194
|
+
isNode: targetProperties && targetProperties.node === true
|
194
195
|
});
|
195
196
|
|
196
197
|
applyOutputDefaults(options.output, {
|
@@ -451,11 +452,12 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
|
|
451
452
|
* @param {JavascriptParserOptions} parserOptions parser options
|
452
453
|
* @param {Object} options options
|
453
454
|
* @param {boolean} options.futureDefaults is future defaults enabled
|
455
|
+
* @param {boolean} options.isNode is node target platform
|
454
456
|
* @returns {void}
|
455
457
|
*/
|
456
458
|
const applyJavascriptParserOptionsDefaults = (
|
457
459
|
parserOptions,
|
458
|
-
{ futureDefaults }
|
460
|
+
{ futureDefaults, isNode }
|
459
461
|
) => {
|
460
462
|
D(parserOptions, "unknownContextRequest", ".");
|
461
463
|
D(parserOptions, "unknownContextRegExp", false);
|
@@ -470,6 +472,10 @@ const applyJavascriptParserOptionsDefaults = (
|
|
470
472
|
D(parserOptions, "wrappedContextCritical", false);
|
471
473
|
D(parserOptions, "strictThisContextOnImports", false);
|
472
474
|
D(parserOptions, "importMeta", true);
|
475
|
+
D(parserOptions, "dynamicImportMode", "lazy");
|
476
|
+
D(parserOptions, "dynamicImportPrefetch", false);
|
477
|
+
D(parserOptions, "dynamicImportPreload", false);
|
478
|
+
D(parserOptions, "createRequire", isNode);
|
473
479
|
if (futureDefaults) D(parserOptions, "exportsPresence", "error");
|
474
480
|
};
|
475
481
|
|
@@ -481,11 +487,12 @@ const applyJavascriptParserOptionsDefaults = (
|
|
481
487
|
* @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
|
482
488
|
* @param {CssExperimentOptions} options.css is css enabled
|
483
489
|
* @param {boolean} options.futureDefaults is future defaults enabled
|
490
|
+
* @param {boolean} options.isNode is node target platform
|
484
491
|
* @returns {void}
|
485
492
|
*/
|
486
493
|
const applyModuleDefaults = (
|
487
494
|
module,
|
488
|
-
{ cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults }
|
495
|
+
{ cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults, isNode }
|
489
496
|
) => {
|
490
497
|
if (cache) {
|
491
498
|
D(module, "unsafeCache", module => {
|
@@ -504,7 +511,8 @@ const applyModuleDefaults = (
|
|
504
511
|
|
505
512
|
F(module.parser, "javascript", () => ({}));
|
506
513
|
applyJavascriptParserOptionsDefaults(module.parser.javascript, {
|
507
|
-
futureDefaults
|
514
|
+
futureDefaults,
|
515
|
+
isNode
|
508
516
|
});
|
509
517
|
|
510
518
|
A(module, "defaultRules", () => {
|
@@ -73,9 +73,9 @@ class RemoteRuntimeModule extends RuntimeModule {
|
|
73
73
|
Template.indent(
|
74
74
|
`error.message += '\\nwhile loading "' + data[1] + '" from ' + data[2];`
|
75
75
|
),
|
76
|
-
|
77
|
-
|
78
|
-
])}`,
|
76
|
+
`${
|
77
|
+
RuntimeGlobals.moduleFactories
|
78
|
+
}[id] = ${runtimeTemplate.basicFunction("", ["throw error;"])}`,
|
79
79
|
"data.p = 0;"
|
80
80
|
])};`,
|
81
81
|
`var handleFunction = ${runtimeTemplate.basicFunction(
|
@@ -111,10 +111,11 @@ class RemoteRuntimeModule extends RuntimeModule {
|
|
111
111
|
)};`,
|
112
112
|
`var onFactory = ${runtimeTemplate.basicFunction("factory", [
|
113
113
|
"data.p = 1;",
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
114
|
+
`${
|
115
|
+
RuntimeGlobals.moduleFactories
|
116
|
+
}[id] = ${runtimeTemplate.basicFunction("module", [
|
117
|
+
"module.exports = factory();"
|
118
|
+
])}`
|
118
119
|
])};`,
|
119
120
|
"handleFunction(__webpack_require__, data[2], 0, 0, onExternal, 1);"
|
120
121
|
])});`
|