allocate Module.factoryMeta only when needed

This commit is contained in:
Tobias Koppers 2019-11-08 12:52:32 +01:00
parent c5483fa7ab
commit 61e8b44fb9
3 changed files with 25 additions and 6 deletions

View File

@ -90,7 +90,11 @@ class FlagDependencyUsagePlugin {
// for a module without side effects we stop tracking usage here when no export is used
// This module won't be evaluated in this case
// TODO webpack 6 remove this check
if (module.factoryMeta.sideEffectFree) return;
if (
module.factoryMeta !== undefined &&
module.factoryMeta.sideEffectFree
)
return;
if (exportsInfo.setUsedForSideEffectsOnly()) {
queue.enqueue(module);
}

View File

@ -105,8 +105,8 @@ class Module extends DependenciesBlock {
// Info from Factory
/** @type {TODO} */
this.resolveOptions = EMPTY_RESOLVE_OPTIONS;
/** @type {object} */
this.factoryMeta = {};
/** @type {object | undefined} */
this.factoryMeta = undefined;
// Info from Build
/** @type {WebpackError[] | undefined} */

View File

@ -68,6 +68,9 @@ class SideEffectsFlagPlugin {
cache
);
if (!hasSideEffects) {
if (module.factoryMeta === undefined) {
module.factoryMeta = {};
}
module.factoryMeta.sideEffectFree = true;
}
}
@ -76,9 +79,14 @@ class SideEffectsFlagPlugin {
});
nmf.hooks.module.tap("SideEffectsFlagPlugin", (module, data) => {
if (data.settings.sideEffects === false) {
if (module.factoryMeta === undefined) {
module.factoryMeta = {};
}
module.factoryMeta.sideEffectFree = true;
} else if (data.settings.sideEffects === true) {
module.factoryMeta.sideEffectFree = false;
if (module.factoryMeta !== undefined) {
module.factoryMeta.sideEffectFree = false;
}
}
return module;
});
@ -98,7 +106,10 @@ class SideEffectsFlagPlugin {
for (const module of modules) {
for (const dep of module.dependencies) {
if (dep instanceof HarmonyExportImportedSpecifierDependency) {
if (module.factoryMeta.sideEffectFree) {
if (
module.factoryMeta !== undefined &&
module.factoryMeta.sideEffectFree
) {
const mode = dep.getMode(moduleGraph, true);
if (mode.type === "normal-reexport") {
let map = reexportMaps.get(module);
@ -120,7 +131,11 @@ class SideEffectsFlagPlugin {
const connection = moduleGraph.getConnection(dep);
if (connection) {
const refModule = connection.resolvedModule;
if (refModule && refModule.factoryMeta.sideEffectFree) {
if (
refModule &&
refModule.factoryMeta !== undefined &&
refModule.factoryMeta.sideEffectFree
) {
connection.active = false;
}
}