Skip to content

Commit 0f6c36c

Browse files
authored
Merge pull request webpack#6111 from webpack/refactor/meta
Refactor meta -> buildMeta, keep instances between builds
2 parents 081ad5d + 5b7645d commit 0f6c36c

File tree

65 files changed

+417
-392
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

65 files changed

+417
-392
lines changed

lib/Compilation.js

Lines changed: 128 additions & 142 deletions
Large diffs are not rendered by default.

lib/ContextModule.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ class ContextModule extends Module {
4040
this.resolveOptions = options.resolveOptions;
4141

4242
// Info from Build
43-
this.builtTime = undefined;
44-
this.contextDependencies = new Set([this.context]);
43+
this._contextDependencies = new Set([this.context]);
4544

4645
if(typeof options.mode !== "string")
4746
throw new Error("options.mode is a required option");
@@ -136,19 +135,19 @@ class ContextModule extends Module {
136135
return true;
137136
}
138137

139-
return ts >= this.builtTime;
138+
return ts >= this.buildInfo.builtTime;
140139
}
141140

142141
build(options, compilation, resolver, fs, callback) {
143142
this.built = true;
144-
this.builtTime = Date.now();
143+
this.buildMeta = {};
144+
this.buildInfo = {
145+
builtTime: Date.now(),
146+
contextDependencies: this._contextDependencies
147+
};
145148
this.resolveDependencies(fs, this.options, (err, dependencies) => {
146149
if(err) return callback(err);
147150

148-
// Reset children
149-
this.dependencies.length = 0;
150-
this.blocks.length = 0;
151-
152151
// abort if something failed
153152
// this will create an empty context
154153
if(!dependencies) {
@@ -238,7 +237,7 @@ class ContextModule extends Module {
238237
.sort((a, b) => {
239238
return b.module.id - a.module.id;
240239
}).reduce((map, dep) => {
241-
const harmonyModule = dep.module.meta && dep.module.meta.harmonyModule;
240+
const harmonyModule = dep.module.buildMeta && dep.module.buildMeta.harmonyModule;
242241
if(!harmonyModule) hasNonHarmony = true;
243242
if(harmonyModule) hasHarmony = true;
244243
map[dep.module.id] = harmonyModule ? 1 : 0;

lib/DelegatedModule.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ class DelegatedModule extends Module {
1818
// Info from Factory
1919
this.sourceRequest = sourceRequest;
2020
this.request = data.id;
21-
this.meta = data.meta;
2221
this.type = type;
2322
this.userRequest = userRequest;
2423
this.originalRequest = originalRequest;
@@ -43,7 +42,8 @@ class DelegatedModule extends Module {
4342

4443
build(options, compilation, resolver, fs, callback) {
4544
this.built = true;
46-
this.dependencies.length = 0;
45+
this.buildMeta = Object.assign({}, this.delegateData.buildMeta);
46+
this.buildInfo = {};
4747
this.addDependency(new DelegatedSourceDependency(this.sourceRequest));
4848
this.addDependency(new DelegatedExportsDependency(this, this.delegateData.exports || true));
4949
callback();

lib/DllModule.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ class DllModule extends Module {
2828

2929
build(options, compilation, resolver, fs, callback) {
3030
this.built = true;
31+
this.buildMeta = {};
32+
this.buildInfo = {};
3133
return callback();
3234
}
3335

lib/ExternalModule.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ class ExternalModule extends Module {
4242

4343
build(options, compilation, resolver, fs, callback) {
4444
this.built = true;
45+
this.buildMeta = {};
46+
this.buildInfo = {};
4547
callback();
4648
}
4749

lib/FlagDependencyExportsPlugin.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ class FlagDependencyExportsPlugin {
5454
moduleWithExports = true;
5555
const exports = exportDesc.exports;
5656
// break early if it's only in the worst state
57-
if(module.providedExports === true) {
57+
if(module.buildMeta.providedExports === true) {
5858
return true;
5959
}
6060
// break if it should move to the worst state
6161
if(exports === true) {
62-
module.providedExports = true;
62+
module.buildMeta.providedExports = true;
6363
notifyDependencies();
6464
return true;
6565
}
@@ -96,27 +96,34 @@ class FlagDependencyExportsPlugin {
9696

9797
// Start with all modules without provided exports
9898
for(const module of modules) {
99-
if(!module.providedExports) {
99+
if(!module.buildMeta.providedExports) {
100100
queue.enqueue(module);
101101
}
102102
}
103103

104104
while(queue.length > 0) {
105105
module = queue.dequeue();
106106

107-
if(module.providedExports !== true) {
108-
moduleWithExports = module.meta && module.meta.harmonyModule;
109-
moduleProvidedExports = Array.isArray(module.providedExports) ? new Set(module.providedExports) : new Set();
107+
if(module.buildMeta.providedExports !== true) {
108+
moduleWithExports = module.buildMeta && module.buildMeta.harmonyModule;
109+
moduleProvidedExports = Array.isArray(module.buildMeta.providedExports) ? new Set(module.buildMeta.providedExports) : new Set();
110110
processDependenciesBlock(module);
111111
if(!moduleWithExports) {
112-
module.providedExports = true;
112+
module.buildMeta.providedExports = true;
113113
notifyDependencies();
114-
} else if(module.providedExports !== true) {
115-
module.providedExports = Array.from(moduleProvidedExports);
114+
} else if(module.buildMeta.providedExports !== true) {
115+
module.buildMeta.providedExports = Array.from(moduleProvidedExports);
116116
}
117117
}
118118
}
119119
});
120+
const providedExportsCache = new WeakMap();
121+
compilation.hooks.rebuildModule.tap("FlagDependencyExportsPlugin", module => {
122+
providedExportsCache.set(module, module.buildMeta.providedExports);
123+
});
124+
compilation.hooks.finishRebuildingModule.tap("FlagDependencyExportsPlugin", module => {
125+
module.buildMeta.providedExports = providedExportsCache.get(module);
126+
});
120127
});
121128
}
122129
}

lib/FlagDependencyUsagePlugin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class FlagDependencyUsagePlugin {
4141

4242
// for a module without side effects we stop tracking usage here when no export is used
4343
// This module won't be evaluated in this case
44-
if(module.sideEffectFree) {
44+
if(module.factoryMeta.sideEffectFree) {
4545
if(module.usedExports === false) return;
4646
if(Array.isArray(module.usedExports) && module.usedExports.length === 0) return;
4747
}

lib/FunctionModuleTemplatePlugin.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class FunctionModuleTemplatePlugin {
2424
args.push(module.exportsArgument, "__webpack_require__");
2525
}
2626
source.add("/***/ (function(" + args.join(", ") + ") {\n\n");
27-
if(module.strict) source.add("\"use strict\";\n");
27+
if(module.buildInfo.strict) source.add("\"use strict\";\n");
2828
source.add(moduleSource);
2929
source.add("\n\n/***/ })");
3030
return source;
@@ -37,11 +37,11 @@ class FunctionModuleTemplatePlugin {
3737
source.add("/*!****" + req.replace(/./g, "*") + "****!*\\\n");
3838
source.add(" !*** " + req.replace(/\*\//g, "*_/") + " ***!\n");
3939
source.add(" \\****" + req.replace(/./g, "*") + "****/\n");
40-
if(Array.isArray(module.providedExports) && module.providedExports.length === 0)
40+
if(Array.isArray(module.buildMeta.providedExports) && module.buildMeta.providedExports.length === 0)
4141
source.add(Template.toComment("no exports provided") + "\n");
42-
else if(Array.isArray(module.providedExports))
43-
source.add(Template.toComment("exports provided: " + module.providedExports.join(", ")) + "\n");
44-
else if(module.providedExports)
42+
else if(Array.isArray(module.buildMeta.providedExports))
43+
source.add(Template.toComment("exports provided: " + module.buildMeta.providedExports.join(", ")) + "\n");
44+
else if(module.buildMeta.providedExports)
4545
source.add(Template.toComment("no static exports found") + "\n");
4646
if(Array.isArray(module.usedExports) && module.usedExports.length === 0)
4747
source.add(Template.toComment("no exports used") + "\n");

lib/LibManifestPlugin.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ class LibManifestPlugin {
4040
ident,
4141
data: {
4242
id: module.id,
43-
meta: module.meta,
44-
exports: Array.isArray(module.providedExports) ? module.providedExports : undefined
43+
buildMeta: module.buildMeta
4544
}
4645
};
4746
}

lib/Module.js

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -59,18 +59,13 @@ class Module extends DependenciesBlock {
5959
// TODO refactor: pass as constructor argument
6060
this.context = null;
6161
this.resolveOptions = EMPTY_RESOLVE_OPTIONS;
62+
this.factoryMeta = {};
6263

6364
// Info from Build
64-
this.sideEffectFree = false;
6565
this.warnings = [];
6666
this.errors = [];
67-
this.strict = false;
68-
this.meta = {};
69-
this.exportsArgument = "exports";
70-
this.moduleArgument = "module";
71-
this.assets = null;
72-
this.fileDependencies = undefined;
73-
this.contextDependencies = undefined;
67+
this.buildMeta = undefined;
68+
this.buildInfo = undefined;
7469

7570
// Graph (per Compilation)
7671
this.reasons = [];
@@ -89,13 +84,20 @@ class Module extends DependenciesBlock {
8984
// Info from Optimization (per Compilation)
9085
this.used = null;
9186
this.usedExports = null;
92-
this.providedExports = null;
9387
this.optimizationBailout = [];
9488

9589
// delayed operations
9690
this._rewriteChunkInReasons = undefined;
9791
}
9892

93+
get exportsArgument() {
94+
return this.buildInfo && this.buildInfo.exportsArgument || "exports";
95+
}
96+
97+
get moduleArgument() {
98+
return this.buildInfo && this.buildInfo.moduleArgument || "module";
99+
}
100+
99101
disconnect() {
100102
this.hash = undefined;
101103
this.renderedHash = undefined;
@@ -115,7 +117,6 @@ class Module extends DependenciesBlock {
115117

116118
this.used = null;
117119
this.usedExports = null;
118-
this.providedExports = null;
119120
this.optimizationBailout.length = 0;
120121
super.disconnect();
121122
}
@@ -253,9 +254,9 @@ class Module extends DependenciesBlock {
253254
}
254255

255256
isProvided(exportName) {
256-
if(!Array.isArray(this.providedExports))
257+
if(!Array.isArray(this.buildMeta.providedExports))
257258
return null;
258-
return this.providedExports.indexOf(exportName) >= 0;
259+
return this.buildMeta.providedExports.indexOf(exportName) >= 0;
259260
}
260261

261262
toString() {
@@ -288,6 +289,11 @@ class Module extends DependenciesBlock {
288289
}
289290

290291
unbuild() {
292+
this.dependencies.length = 0;
293+
this.blocks.length = 0;
294+
this.variables.length = 0;
295+
this.buildMeta = undefined;
296+
this.buildInfo = undefined;
291297
this.disconnect();
292298
}
293299

@@ -320,6 +326,16 @@ Object.defineProperty(Module.prototype, "chunks", {
320326
}
321327
});
322328

329+
Object.defineProperty(Module.prototype, "meta", {
330+
configurable: false,
331+
get: util.deprecate(function() {
332+
return this.buildMeta;
333+
}, "Module.meta was renamed to Module.buildMeta"),
334+
set: util.deprecate(function(value) {
335+
this.buildMeta = value;
336+
}, "Module.meta was renamed to Module.buildMeta"),
337+
});
338+
323339
Module.prototype.identifier = null;
324340
Module.prototype.readableIdentifier = null;
325341
Module.prototype.build = null;

0 commit comments

Comments
 (0)