Skip to content

Commit c68f224

Browse files
committed
move providedExports into buildMeta
1 parent aae32c7 commit c68f224

File tree

45 files changed

+153
-143
lines changed

Some content is hidden

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

45 files changed

+153
-143
lines changed

lib/Compilation.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ class Compilation extends Tapable {
6565
super();
6666
this.hooks = {
6767
buildModule: new SyncHook(["module"]),
68+
rebuildModule: new SyncHook(["module"]),
6869
failedModule: new SyncHook(["module", "error"]),
6970
succeedModule: new SyncHook(["module"]),
7071

7172
finishModules: new SyncHook(["modules"]),
73+
finishRebuildingModule: new SyncHook(["module"]),
7274

7375
unseal: new SyncHook([]),
7476
seal: new SyncHook([]),
@@ -292,7 +294,6 @@ class Compilation extends Tapable {
292294
}
293295

294296
buildModule(module, optional, origin, dependencies, thisCallback) {
295-
this.hooks.buildModule.call(module);
296297
let callbackList = this._buildingModules.get(module);
297298
if(callbackList) {
298299
callbackList.push(thisCallback);
@@ -305,6 +306,7 @@ class Compilation extends Tapable {
305306
callbackList.forEach(cb => cb(err));
306307
};
307308

309+
this.hooks.buildModule.call(module);
308310
module.build(this.options, this, this.resolverFactory.get("normal", module.resolveOptions), this.inputFileSystem, (error) => {
309311
const errors = module.errors;
310312
for(let indexError = 0; indexError < errors.length; indexError++) {
@@ -671,11 +673,16 @@ class Compilation extends Tapable {
671673
callbackList.forEach(cb => cb(err));
672674
};
673675

676+
this.hooks.rebuildModule.call(module);
674677
const oldDependencies = module.dependencies.slice();
675678
const oldVariables = module.variables.slice();
676679
const oldBlocks = module.blocks.slice();
680+
module.unbuild();
677681
this.buildModule(module, false, module, null, (err) => {
678-
if(err) return callback(err);
682+
if(err) {
683+
this.hooks.finishRebuildingModule.call(module);
684+
return callback(err);
685+
}
679686

680687
this.processModuleDependencies(module, (err) => {
681688
if(err) return callback(err);
@@ -684,6 +691,7 @@ class Compilation extends Tapable {
684691
variables: oldVariables,
685692
blocks: oldBlocks
686693
});
694+
this.hooks.finishRebuildingModule.call(module);
687695
callback();
688696
});
689697

@@ -1514,7 +1522,6 @@ class Compilation extends Tapable {
15141522
createModuleAssets() {
15151523
for(let i = 0; i < this.modules.length; i++) {
15161524
const module = this.modules[i];
1517-
if(!module.buildInfo) console.log(module);
15181525
if(module.buildInfo.assets) {
15191526
Object.keys(module.buildInfo.assets).forEach((assetName) => {
15201527
const fileName = this.getPath(assetName);

lib/FlagDependencyExportsPlugin.js

Lines changed: 15 additions & 8 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) {
107+
if(module.buildMeta.providedExports !== true) {
108108
moduleWithExports = module.buildMeta && module.buildMeta.harmonyModule;
109-
moduleProvidedExports = Array.isArray(module.providedExports) ? new Set(module.providedExports) : new Set();
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/FunctionModuleTemplatePlugin.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
buildMeta: module.buildMeta,
44-
exports: Array.isArray(module.providedExports) ? module.providedExports : undefined
43+
buildMeta: module.buildMeta
4544
}
4645
};
4746
}

lib/Module.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ class Module extends DependenciesBlock {
8484
// Info from Optimization (per Compilation)
8585
this.used = null;
8686
this.usedExports = null;
87-
this.providedExports = null;
8887
this.optimizationBailout = [];
8988

9089
// delayed operations
@@ -118,7 +117,6 @@ class Module extends DependenciesBlock {
118117

119118
this.used = null;
120119
this.usedExports = null;
121-
this.providedExports = null;
122120
this.optimizationBailout.length = 0;
123121
super.disconnect();
124122
}
@@ -256,9 +254,9 @@ class Module extends DependenciesBlock {
256254
}
257255

258256
isProvided(exportName) {
259-
if(!Array.isArray(this.providedExports))
257+
if(!Array.isArray(this.buildMeta.providedExports))
260258
return null;
261-
return this.providedExports.indexOf(exportName) >= 0;
259+
return this.buildMeta.providedExports.indexOf(exportName) >= 0;
262260
}
263261

264262
toString() {

lib/Stats.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,7 @@ class Stats {
371371
obj.usedExports = module.used ? module.usedExports : false;
372372
}
373373
if(showProvidedExports) {
374-
obj.providedExports = Array.isArray(module.providedExports) ? module.providedExports : null;
374+
obj.providedExports = Array.isArray(module.buildMeta.providedExports) ? module.buildMeta.providedExports : null;
375375
}
376376
if(showOptimizationBailout) {
377377
obj.optimizationBailout = module.optimizationBailout.map(item => {

lib/dependencies/HarmonyExportImportedSpecifierDependency.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
9595
}
9696

9797
const hasUsedExports = Array.isArray(this.originModule.usedExports);
98-
const hasProvidedExports = Array.isArray(importedModule.providedExports);
98+
const hasProvidedExports = Array.isArray(importedModule.buildMeta.providedExports);
9999
const activeFromOtherStarExports = this._discoverActiveExportsFromOtherStartExports();
100100

101101
// export *
@@ -106,7 +106,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
106106
if(id === "default") return false;
107107
if(this.activeExports.has(id)) return false;
108108
if(activeFromOtherStarExports.has(id)) return false;
109-
if(importedModule.providedExports.indexOf(id) < 0) return false;
109+
if(importedModule.buildMeta.providedExports.indexOf(id) < 0) return false;
110110

111111
return true;
112112
}).map(item => [item, item]));
@@ -146,7 +146,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
146146
}
147147

148148
if(hasProvidedExports) {
149-
const map = new Map(importedModule.providedExports
149+
const map = new Map(importedModule.buildMeta.providedExports
150150
.filter(id => {
151151
if(id === "default") return false;
152152
if(this.activeExports.has(id)) return false;
@@ -225,8 +225,8 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
225225
// try to learn impossible exports from other star exports with provided exports
226226
for(const otherStarExport of this.otherStarExports) {
227227
const otherImportedModule = otherStarExport.module;
228-
if(otherImportedModule && Array.isArray(otherImportedModule.providedExports)) {
229-
for(const exportName of otherImportedModule.providedExports)
228+
if(otherImportedModule && Array.isArray(otherImportedModule.buildMeta.providedExports)) {
229+
for(const exportName of otherImportedModule.buildMeta.providedExports)
230230
result.add(exportName);
231231
}
232232
}
@@ -249,14 +249,14 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
249249
};
250250
}
251251

252-
if(Array.isArray(importedModule.providedExports)) {
252+
if(Array.isArray(importedModule.buildMeta.providedExports)) {
253253
return {
254-
exports: importedModule.providedExports.filter(id => id !== "default"),
254+
exports: importedModule.buildMeta.providedExports.filter(id => id !== "default"),
255255
dependencies: [importedModule]
256256
};
257257
}
258258

259-
if(importedModule.providedExports) {
259+
if(importedModule.buildMeta.providedExports) {
260260
return {
261261
exports: true
262262
};
@@ -329,7 +329,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
329329
}
330330

331331
const stringifiedUsedExport = JSON.stringify(importedModule.usedExports);
332-
const stringifiedProvidedExport = JSON.stringify(importedModule.providedExports);
332+
const stringifiedProvidedExport = JSON.stringify(importedModule.buildMeta.providedExports);
333333
return importedModule.used + stringifiedUsedExport + stringifiedProvidedExport;
334334
}
335335
}
@@ -365,10 +365,10 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
365365
});
366366
if(unused) return NaN;
367367

368-
} else if(dep.originModule.usedExports && importedModule && Array.isArray(importedModule.providedExports)) {
368+
} else if(dep.originModule.usedExports && importedModule && Array.isArray(importedModule.buildMeta.providedExports)) {
369369
// not sure which exports are used, but we know which are provided
370370

371-
const unused = importedModule.providedExports.every(id => {
371+
const unused = importedModule.buildMeta.providedExports.every(id => {
372372
if(id === "default") return true;
373373
if(dep.activeExports.has(id)) return true;
374374
if(activeFromOtherStarExports.has(id)) return true;

lib/optimize/ConcatenatedModule.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ const ensureNsObjSource = (info, moduleToInfoMap, requestShortener, strictHarmon
2525
info.hasNamespaceObject = true;
2626
const name = info.exportMap.get(true);
2727
const nsObj = [`var ${name} = {};`];
28-
for(const exportName of info.module.providedExports) {
28+
for(const exportName of info.module.buildMeta.providedExports) {
2929
const finalName = getFinalName(info, exportName, moduleToInfoMap, requestShortener, false, strictHarmonyModule);
3030
nsObj.push(`__webpack_require__.d(${name}, ${JSON.stringify(exportName)}, function() { return ${finalName}; });`);
3131
}
@@ -186,7 +186,6 @@ class ConcatenatedModule extends Module {
186186
// Info from Optimization
187187
this.used = rootModule.used;
188188
this.usedExports = rootModule.usedExports;
189-
this.providedExports = rootModule.providedExports;
190189
this.optimizationBailout = rootModule.optimizationBailout;
191190

192191
// Info from Build
@@ -373,7 +372,7 @@ class ConcatenatedModule extends Module {
373372
});
374373
}
375374
} else if(importedModule) {
376-
importedModule.providedExports.forEach(name => {
375+
importedModule.buildMeta.providedExports.forEach(name => {
377376
if(dep.activeExports.has(name) || name === "default")
378377
return;
379378
if(!reexportMap.has(name)) {
@@ -859,7 +858,7 @@ class HarmonyExportImportedSpecifierDependencyConcatenatedTemplate {
859858
}];
860859
}
861860
// export * from "module"
862-
return importModule.providedExports.filter(exp => exp !== "default" && !dep.activeExports.has(exp)).map(exp => {
861+
return importModule.buildMeta.providedExports.filter(exp => exp !== "default" && !dep.activeExports.has(exp)).map(exp => {
863862
return {
864863
name: exp,
865864
id: exp,

lib/optimize/ModuleConcatenationPlugin.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ class ModuleConcatenationPlugin {
6060
}
6161

6262
// Exports must be known (and not dynamic)
63-
if(!Array.isArray(module.providedExports)) {
63+
if(!Array.isArray(module.buildMeta.providedExports)) {
6464
setBailoutReason(module, "Module exports are unknown");
6565
continue;
6666
}
@@ -207,7 +207,7 @@ class ModuleConcatenationPlugin {
207207
.filter(ref => ref && ref.module)
208208

209209
// Dependencies are simple enough to concat them
210-
.filter(ref => Array.isArray(ref.importedNames) || Array.isArray(ref.module.providedExports))
210+
.filter(ref => Array.isArray(ref.importedNames) || Array.isArray(ref.module.buildMeta.providedExports))
211211

212212
// Take the imported module
213213
.map(ref => ref.module)

test/configCases/scope-hoisting/dll-plugin/webpack.config.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ module.exports = {
88
"./module": {
99
id: 1,
1010
buildMeta: {
11-
harmonyModule: true
11+
harmonyModule: true,
12+
providedExports: ["default"]
1213
},
13-
exports: ["default"]
1414
}
1515
}
1616
}),

0 commit comments

Comments
 (0)