Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
132 changes: 0 additions & 132 deletions crates/rspack_plugin_esm_library/src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -300,133 +300,6 @@ async fn finish_modules(
_side_effects_state_artifact: &mut SideEffectsStateArtifact,
) -> Result<()> {
let module_graph = compilation.get_module_graph();
let mut modules_map = IdentifierIndexMap::default();
let mut modules = module_graph.modules().collect::<Vec<_>>();
modules.sort_by_key(|(m1, _)| *m1);
let logger = compilation.get_logger("rspack.EsmLibraryPlugin");

for (idx, (module_identifier, module)) in modules.into_iter().enumerate() {
// make sure all exports are provided
let mut should_scope_hoisting = true;

if let Some(reason) = module.get_concatenation_bailout_reason(
module_graph,
&compilation.build_chunk_graph_artifact.chunk_graph,
) {
logger.debug(format!(
"module {module_identifier} has bailout reason: {reason}",
));
should_scope_hoisting = false;
}
// TODO: support config to disable scope hoisting for non strict module
// else if !module.build_info().strict {
// logger.debug(format!("module {module_identifier} is not strict module"));
// should_scope_hoisting = false;
// }
else if module_graph
.get_incoming_connections(module_identifier)
.map(|conn| module_graph.dependency_by_id(&conn.dependency_id))
.any(|dep| {
!is_esm_dep_like(dep)
&& !matches!(
dep.dependency_type(),
DependencyType::Entry | DependencyType::DynamicImport
)
})
{
logger.debug(format!(
"module {module_identifier} is referenced by non esm dependency"
));
should_scope_hoisting = false;
}

// if we reach here, check exports info
if should_scope_hoisting {
let exports_info = exports_info_artifact.get_exports_info_data(module_identifier);

let relevant_exports = exports_info.get_relevant_exports(None);
let unknown_exports = relevant_exports
.iter()
.filter(|export_info| {
export_info.is_reexport()
&& !matches!(
get_target(
export_info,
module_graph,
exports_info_artifact,
&|_| true,
&mut Default::default()
),
Some(GetTargetResult::Target(_))
)
})
.copied()
.collect::<Vec<_>>();

if !unknown_exports.is_empty() {
logger.debug(format!(
"module {module_identifier} has unknown reexport: {:?}",
unknown_exports.iter().map(|e| e.name()).collect::<Vec<_>>()
));
should_scope_hoisting = false;
}
}

if should_scope_hoisting {
modules_map.insert(
*module_identifier,
ModuleInfo::Concatenated(Box::new(ConcatenatedModuleInfo {
index: idx,
module: *module_identifier,
..Default::default()
})),
);
} else {
modules_map.insert(
*module_identifier,
ModuleInfo::External(ExternalModuleInfo::new(idx, *module_identifier)),
);
}
}

// we should mark all wrapped modules' children as wrapped
let mut visited = IdentifierSet::default();
let mut stack = modules_map
.iter()
.filter(|(_, info)| matches!(info, ModuleInfo::External(_)))
.map(|(id, _)| *id)
.collect::<Vec<_>>();

let module_graph = compilation.get_module_graph();
while let Some(m) = stack.pop() {
if !visited.insert(m) {
continue;
}

for dep in module_graph.get_outgoing_deps_in_order(&m) {
let Some(dep_module) = module_graph.module_identifier_by_dependency_id(dep) else {
continue;
};

if let Some(info) = modules_map.get_mut(dep_module)
&& let ModuleInfo::Concatenated(concate_info) = info
{
*info = ModuleInfo::External(ExternalModuleInfo::new(
concate_info.index,
concate_info.module,
));
stack.push(*dep_module);
}
}
}

// only used for scope
// we mutably modify data in `self.concatenated_modules_map`
let mut map = self.concatenated_modules_map_for_codegen.borrow_mut();
*map = Arc::new(modules_map.clone());
drop(map);

*self.concatenated_modules_map.write().await = modules_map;
// mark all entry exports as used
let mut entry_modules = IdentifierSet::default();
for entry_data in compilation.entries.values() {
Expand Down Expand Up @@ -970,11 +843,6 @@ impl Plugin for EsmLibraryPlugin {
.optimize_chunks
.tap(optimize_runtime_chunk_hook::new(self));

ctx
.compilation_hooks
.optimize_dependencies
.tap(optimize_dependencies::new(self));

ctx
.compilation_hooks
.optimize_chunk_modules
Expand Down
Loading