allocate Module.factoryMeta only when needed
This commit is contained in:
parent
c5483fa7ab
commit
61e8b44fb9
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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} */
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue