From ff6e6cea5a51d16f014d62f8ac723b4d0b246c02 Mon Sep 17 00:00:00 2001 From: ahabhgk Date: Mon, 2 Dec 2024 20:03:41 +0800 Subject: [PATCH] feat-inc-named-module-od --- crates/rspack_core/src/chunk.rs | 2 +- .../src/chunk_graph/chunk_graph_module.rs | 24 +++++++------ .../rspack_core/src/compiler/compilation.rs | 3 ++ crates/rspack_core/src/compiler/hmr.rs | 13 +++---- .../src/compiler/module_executor/execute.rs | 15 +++----- crates/rspack_core/src/concatenated_module.rs | 31 ++++++++++------- crates/rspack_core/src/context_module.rs | 34 ++++++++----------- .../src/dependency/runtime_template.rs | 4 +-- crates/rspack_core/src/external_module.rs | 7 ++-- crates/rspack_core/src/module_graph/module.rs | 7 +--- crates/rspack_core/src/stats/mod.rs | 17 ++++------ crates/rspack_core/src/stats/utils.rs | 10 +++--- .../src/deterministic_chunk_ids_plugin.rs | 2 +- .../src/deterministic_module_ids_plugin.rs | 9 ++--- crates/rspack_ids/src/id_helpers.rs | 18 +++++----- .../rspack_ids/src/named_chunk_ids_plugin.rs | 2 +- .../rspack_ids/src/named_module_ids_plugin.rs | 14 ++++---- .../src/natural_chunk_ids_plugin.rs | 3 +- .../src/natural_module_ids_plugin.rs | 6 ++-- crates/rspack_plugin_asset/src/lib.rs | 10 ++++-- .../src/plugin/impl_plugin_for_css_plugin.rs | 10 +++--- crates/rspack_plugin_css/src/utils.rs | 13 +++++-- .../src/module_filename_helpers.rs | 11 ++---- .../src/lib_manifest_plugin.rs | 4 +-- .../commonjs/module_decorator_dependency.rs | 12 +++---- .../src/plugin/impl_plugin_for_js_plugin.rs | 2 +- .../src/plugin/mod.rs | 5 +-- .../rspack_plugin_javascript/src/runtime.rs | 4 +-- .../src/module.rs | 11 ++---- crates/rspack_plugin_library/src/utils.rs | 10 +++--- .../src/container/fallback_module.rs | 8 ++--- .../src/container/remote_module.rs | 8 +++-- .../src/container/remote_runtime_module.rs | 14 ++++---- .../sharing/consume_shared_runtime_module.rs | 4 +-- crates/rspack_plugin_runtime/src/helpers.rs | 8 ++--- .../src/module_chunk_format.rs | 12 +++---- .../src/parser_and_generator.rs | 15 ++++---- 37 files changed, 182 insertions(+), 200 deletions(-) diff --git a/crates/rspack_core/src/chunk.rs b/crates/rspack_core/src/chunk.rs index 04c87f5dfc8f..8a90e176a162 100644 --- a/crates/rspack_core/src/chunk.rs +++ b/crates/rspack_core/src/chunk.rs @@ -635,7 +635,7 @@ impl Chunk { .chunk_graph .get_chunk_entry_modules_with_chunk_group_iterable(&self.ukey) { - compilation.chunk_graph.get_module_id(*module).hash(hasher); + ChunkGraph::get_module_id(&compilation.module_ids, *module).hash(hasher); if let Some(chunk_group) = compilation.chunk_group_by_ukey.get(chunk_group) { chunk_group.id(compilation).hash(hasher); } diff --git a/crates/rspack_core/src/chunk_graph/chunk_graph_module.rs b/crates/rspack_core/src/chunk_graph/chunk_graph_module.rs index 269c048a44c6..bedbf5274085 100644 --- a/crates/rspack_core/src/chunk_graph/chunk_graph_module.rs +++ b/crates/rspack_core/src/chunk_graph/chunk_graph_module.rs @@ -2,7 +2,7 @@ use std::hash::{Hash, Hasher}; -use rspack_collections::{IdentifierSet, UkeySet}; +use rspack_collections::{IdentifierMap, IdentifierSet, UkeySet}; use rspack_hash::RspackHashDigest; use rspack_util::ext::DynHash; use rustc_hash::FxHasher; @@ -17,7 +17,6 @@ use crate::{ChunkGraph, Module}; #[derive(Debug, Clone, Default)] pub struct ChunkGraphModule { - pub id: Option, pub(super) entry_in_chunks: UkeySet, pub chunks: UkeySet, pub(super) runtime_in_chunks: UkeySet, @@ -26,7 +25,6 @@ pub struct ChunkGraphModule { impl ChunkGraphModule { pub fn new() -> Self { Self { - id: None, entry_in_chunks: Default::default(), chunks: Default::default(), runtime_in_chunks: Default::default(), @@ -147,14 +145,19 @@ impl ChunkGraph { runtimes } - pub fn get_module_id(&self, module_identifier: ModuleIdentifier) -> Option<&str> { - let cgm = self.expect_chunk_graph_module(module_identifier); - cgm.id.as_deref() + pub fn get_module_id( + module_ids: &IdentifierMap, + module_identifier: ModuleIdentifier, + ) -> Option<&str> { + module_ids.get(&module_identifier).map(|id| id.as_str()) } - pub fn set_module_id(&mut self, module_identifier: ModuleIdentifier, id: String) { - let cgm = self.expect_chunk_graph_module_mut(module_identifier); - cgm.id = Some(id); + pub fn set_module_id( + module_ids: &mut IdentifierMap, + module_identifier: ModuleIdentifier, + id: String, + ) -> Option { + module_ids.insert(module_identifier, id) } pub fn get_block_chunk_group<'a>( @@ -245,8 +248,7 @@ impl ChunkGraph { let mut hasher = FxHasher::default(); let mg = compilation.get_module_graph(); let module_identifier = module.identifier(); - let cgm = self.expect_chunk_graph_module(module_identifier); - cgm.id.as_ref().dyn_hash(&mut hasher); + Self::get_module_id(&compilation.module_ids, module_identifier).dyn_hash(&mut hasher); module.source_types().dyn_hash(&mut hasher); ModuleGraph::is_async(compilation, &module_identifier).dyn_hash(&mut hasher); mg.get_exports_info(&module_identifier) diff --git a/crates/rspack_core/src/compiler/compilation.rs b/crates/rspack_core/src/compiler/compilation.rs index 746c63ac6566..f7a0b5ccc215 100644 --- a/crates/rspack_core/src/compiler/compilation.rs +++ b/crates/rspack_core/src/compiler/compilation.rs @@ -172,6 +172,8 @@ pub struct Compilation { pub async_modules: IdentifierSet, // artifact for collect_dependencies_diagnostics pub dependencies_diagnostics: IdentifierMap>, + // artifact for module_ids + pub module_ids: IdentifierMap, // artifact for code_generation pub code_generation_results: CodeGenerationResults, // artifact for create_module_hashes @@ -281,6 +283,7 @@ impl Compilation { async_modules: Default::default(), dependencies_diagnostics: Default::default(), + module_ids: Default::default(), code_generation_results: Default::default(), cgm_hash_results: Default::default(), cgm_runtime_requirements_results: Default::default(), diff --git a/crates/rspack_core/src/compiler/hmr.rs b/crates/rspack_core/src/compiler/hmr.rs index 35627ebd8840..155e0db1a8ad 100644 --- a/crates/rspack_core/src/compiler/hmr.rs +++ b/crates/rspack_core/src/compiler/hmr.rs @@ -1,6 +1,6 @@ use std::path::PathBuf; -use rayon::iter::{IntoParallelRefIterator, ParallelIterator}; +use rayon::iter::{ParallelBridge, ParallelIterator}; use rspack_collections::{Identifier, IdentifierMap}; use rspack_error::Result; use rspack_hash::RspackHashDigest; @@ -8,8 +8,8 @@ use rspack_sources::Source; use rustc_hash::FxHashSet as HashSet; use crate::{ - fast_set, incremental::IncrementalPasses, ChunkKind, Compilation, Compiler, ModuleExecutor, - RuntimeSpec, + fast_set, incremental::IncrementalPasses, ChunkGraph, ChunkKind, Compilation, Compiler, + ModuleExecutor, RuntimeSpec, }; impl Compiler { @@ -192,9 +192,10 @@ pub fn collect_changed_modules(compilation: &Compilation) -> Result for ExecuteTask { compilation.chunk_group_by_ukey.add(entrypoint); // Assign ids to modules and modules to the chunk - let module_graph = compilation.get_module_graph(); - for m in &modules { - let module = module_graph - .module_by_identifier(m) - .expect("should have module"); - - let id = module.identifier(); - - chunk_graph.add_module(id); - chunk_graph.set_module_id(*m, id.to_string()); - chunk_graph.connect_chunk_and_module(chunk_ukey, *m); + for &m in &modules { + chunk_graph.add_module(m); + ChunkGraph::set_module_id(&mut compilation.module_ids, m, m.to_string()); + chunk_graph.connect_chunk_and_module(chunk_ukey, m); } // Webpack uses this trick to make sure process_runtime_requirements access diff --git a/crates/rspack_core/src/concatenated_module.rs b/crates/rspack_core/src/concatenated_module.rs index 1485baf00983..d7faf462eb96 100644 --- a/crates/rspack_core/src/concatenated_module.rs +++ b/crates/rspack_core/src/concatenated_module.rs @@ -38,13 +38,14 @@ use crate::{ reserved_names::RESERVED_NAMES, returning_function, runtime_condition_expression, subtract_runtime_condition, to_identifier, AsyncDependenciesBlockIdentifier, BoxDependency, BuildContext, BuildInfo, BuildMeta, BuildMetaDefaultObject, BuildMetaExportsType, BuildResult, - ChunkInitFragments, CodeGenerationDataTopLevelDeclarations, CodeGenerationExportsFinalNames, - CodeGenerationResult, Compilation, ConcatenatedModuleIdent, ConcatenationScope, ConnectionState, - Context, DependenciesBlock, DependencyId, DependencyTemplate, DependencyType, ErrorSpan, - ExportInfo, ExportInfoProvided, ExportsArgument, ExportsType, FactoryMeta, IdentCollector, - LibIdentOptions, Module, ModuleDependency, ModuleGraph, ModuleGraphConnection, ModuleIdentifier, - ModuleLayer, ModuleType, Resolve, RuntimeCondition, RuntimeGlobals, RuntimeSpec, SourceType, - SpanExt, Template, UsageState, UsedName, DEFAULT_EXPORT, NAMESPACE_OBJECT_EXPORT, + ChunkGraph, ChunkInitFragments, CodeGenerationDataTopLevelDeclarations, + CodeGenerationExportsFinalNames, CodeGenerationResult, Compilation, ConcatenatedModuleIdent, + ConcatenationScope, ConnectionState, Context, DependenciesBlock, DependencyId, + DependencyTemplate, DependencyType, ErrorSpan, ExportInfo, ExportInfoProvided, ExportsArgument, + ExportsType, FactoryMeta, IdentCollector, LibIdentOptions, Module, ModuleDependency, ModuleGraph, + ModuleGraphConnection, ModuleIdentifier, ModuleLayer, ModuleType, Resolve, RuntimeCondition, + RuntimeGlobals, RuntimeSpec, SourceType, SpanExt, Template, UsageState, UsedName, DEFAULT_EXPORT, + NAMESPACE_OBJECT_EXPORT, }; type ExportsDefinitionArgs = Vec<(String, String)>; @@ -1226,8 +1227,11 @@ impl Module for ConcatenatedModule { "var {} = {}({});", info.name.as_ref().expect("should have name"), RuntimeGlobals::REQUIRE, - serde_json::to_string(&compilation.chunk_graph.get_module_id(info.module)) - .expect("should have module id") + serde_json::to_string( + ChunkGraph::get_module_id(&compilation.module_ids, info.module) + .expect("should have module id") + ) + .expect("should json stringify module id") ))); name = info.name.clone(); @@ -1335,10 +1339,11 @@ impl Module for ConcatenatedModule { .expect("should have module") .update_hash(hasher, compilation, generation_runtime)?, ConcatenationEntry::External(e) => { - compilation - .chunk_graph - .get_module_id(e.module(&compilation.get_module_graph())) - .dyn_hash(hasher); + ChunkGraph::get_module_id( + &compilation.module_ids, + e.module(&compilation.get_module_graph()), + ) + .dyn_hash(hasher); } }; } diff --git a/crates/rspack_core/src/context_module.rs b/crates/rspack_core/src/context_module.rs index aeb8f4a4d7fb..4ebc1014bbd2 100644 --- a/crates/rspack_core/src/context_module.rs +++ b/crates/rspack_core/src/context_module.rs @@ -6,7 +6,7 @@ use cow_utils::CowUtils; use derivative::Derivative; use indoc::formatdoc; use itertools::Itertools; -use rspack_collections::{Identifiable, Identifier}; +use rspack_collections::{Identifiable, Identifier, IdentifierMap}; use rspack_error::{impl_empty_diagnosable_trait, Diagnostic, Result}; use rspack_macros::impl_source_map_config; use rspack_paths::Utf8PathBuf; @@ -183,11 +183,8 @@ impl ContextModule { } } - pub fn id<'chunk_graph>(&self, chunk_graph: &'chunk_graph ChunkGraph) -> &'chunk_graph str { - chunk_graph - .get_module_id(self.identifier) - .as_ref() - .expect("module id not found") + pub fn get_module_id<'a>(&self, module_ids: &'a IdentifierMap) -> &'a str { + ChunkGraph::get_module_id(module_ids, self.identifier).expect("module id not found") } fn get_fake_map( @@ -209,10 +206,7 @@ impl ContextModule { .map(|m| (m, dep_id)) }) .filter_map(|(m, dep)| { - compilation - .chunk_graph - .get_module_id(*m) - .map(|id| (id.to_string(), dep)) + ChunkGraph::get_module_id(&compilation.module_ids, *m).map(|id| (id.to_string(), dep)) }) .sorted_unstable_by_key(|(module_id, _)| module_id.to_string()); for (module_id, dep) in sorted_modules { @@ -307,7 +301,7 @@ impl ContextModule { }); let module_id = module_graph .module_identifier_by_dependency_id(dep_id) - .and_then(|module| compilation.chunk_graph.get_module_id(*module)) + .and_then(|module| ChunkGraph::get_module_id(&compilation.module_ids, *module)) .map(|s| s.to_string()); // module_id could be None in weak mode dep.map(|dep| (dep, module_id)) @@ -333,7 +327,7 @@ impl ContextModule { module.exports = webpackEmptyAsyncContext; "#, keys = returning_function(&compilation.options.output.environment, "[]", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }) .boxed() } @@ -351,7 +345,7 @@ impl ContextModule { module.exports = webpackEmptyContext; "#, keys = returning_function(&compilation.options.output.environment, "[]", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }) .boxed() } @@ -448,7 +442,7 @@ impl ContextModule { })?; let module_id = module_graph .module_identifier_by_dependency_id(d) - .and_then(|m| compilation.chunk_graph.get_module_id(*m))?; + .and_then(|m| ChunkGraph::get_module_id(&compilation.module_ids, *m))?; Some((chunks, user_request, module_id.to_string())) }) .collect::>(); @@ -556,7 +550,7 @@ impl ContextModule { "#, map = json_stringify(&map), keys = returning_function(&compilation.options.output.environment, "Object.keys(map)", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) })); source.boxed() } @@ -618,7 +612,7 @@ impl ContextModule { fake_map_init_statement = self.get_fake_map_init_statement(&fake_map), has_own_property = RuntimeGlobals::HAS_OWN_PROPERTY, keys = returning_function(&compilation.options.output.environment, "Object.keys(map)", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }; RawSource::from(source).boxed() } @@ -664,7 +658,7 @@ impl ContextModule { module_factories = RuntimeGlobals::MODULE_FACTORIES, has_own_property = RuntimeGlobals::HAS_OWN_PROPERTY, keys = returning_function(&compilation.options.output.environment, "Object.keys(map)", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }; RawSource::from(source).boxed() } @@ -705,7 +699,7 @@ impl ContextModule { module_factories = RuntimeGlobals::MODULE_FACTORIES, has_own_property = RuntimeGlobals::HAS_OWN_PROPERTY, keys = returning_function(&compilation.options.output.environment, "Object.keys(map)", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }; RawSource::from(source).boxed() } @@ -756,7 +750,7 @@ impl ContextModule { fake_map_init_statement = self.get_fake_map_init_statement(&fake_map), has_own_property = RuntimeGlobals::HAS_OWN_PROPERTY, keys = returning_function(&compilation.options.output.environment, "Object.keys(map)", ""), - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }; RawSource::from(source).boxed() } @@ -793,7 +787,7 @@ impl ContextModule { map = json_stringify(&map), fake_map_init_statement = self.get_fake_map_init_statement(&fake_map), has_own_property = RuntimeGlobals::HAS_OWN_PROPERTY, - id = json_stringify(self.id(&compilation.chunk_graph)) + id = json_stringify(self.get_module_id(&compilation.module_ids)) }; RawSource::from(source).boxed() } diff --git a/crates/rspack_core/src/dependency/runtime_template.rs b/crates/rspack_core/src/dependency/runtime_template.rs index 3d28b6be5135..68fbdb9df0ac 100644 --- a/crates/rspack_core/src/dependency/runtime_template.rs +++ b/crates/rspack_core/src/dependency/runtime_template.rs @@ -350,7 +350,7 @@ pub fn module_id( if let Some(module_identifier) = compilation .get_module_graph() .module_identifier_by_dependency_id(id) - && let Some(module_id) = compilation.chunk_graph.get_module_id(*module_identifier) + && let Some(module_id) = ChunkGraph::get_module_id(&compilation.module_ids, *module_identifier) { module_id_expr(&compilation.options, request, module_id) } else if weak { @@ -645,7 +645,7 @@ pub fn module_raw( if let Some(module_identifier) = compilation .get_module_graph() .module_identifier_by_dependency_id(id) - && let Some(module_id) = compilation.chunk_graph.get_module_id(*module_identifier) + && let Some(module_id) = ChunkGraph::get_module_id(&compilation.module_ids, *module_identifier) { runtime_requirements.insert(RuntimeGlobals::REQUIRE); format!( diff --git a/crates/rspack_core/src/external_module.rs b/crates/rspack_core/src/external_module.rs index b54ce0b208a0..73b8a93b32f3 100644 --- a/crates/rspack_core/src/external_module.rs +++ b/crates/rspack_core/src/external_module.rs @@ -307,11 +307,8 @@ impl ExternalModule { } } "amd" | "amd-require" | "umd" | "umd2" | "system" | "jsonp" => { - let id = compilation - .get_module_graph() - .module_graph_module_by_identifier(&self.identifier()) - .map(|m| m.id(&compilation.chunk_graph)) - .unwrap_or_default(); + let id = ChunkGraph::get_module_id(&compilation.module_ids, self.identifier()) + .expect("should have module id"); format!( "{} = __WEBPACK_EXTERNAL_MODULE_{}__;", get_namespace_object_export(concatenation_scope, supports_const), diff --git a/crates/rspack_core/src/module_graph/module.rs b/crates/rspack_core/src/module_graph/module.rs index ef8004fe8262..43bf46b07840 100644 --- a/crates/rspack_core/src/module_graph/module.rs +++ b/crates/rspack_core/src/module_graph/module.rs @@ -1,7 +1,7 @@ use rustc_hash::FxHashSet as HashSet; use crate::ExportsInfo; -use crate::{ChunkGraph, DependencyId, ModuleIdentifier, ModuleIssuer, ModuleProfile}; +use crate::{DependencyId, ModuleIdentifier, ModuleIssuer, ModuleProfile}; #[derive(Debug, Clone)] pub struct ModuleGraphModule { @@ -42,11 +42,6 @@ impl ModuleGraphModule { } } - pub fn id<'chunk_graph>(&self, chunk_graph: &'chunk_graph ChunkGraph) -> &'chunk_graph str { - let c = chunk_graph.get_module_id(self.module_identifier); - c.unwrap_or_else(|| panic!("{} module id not found", self.module_identifier)) - } - pub fn add_incoming_connection(&mut self, dependency_id: DependencyId) { self.incoming_connections.insert(dependency_id); } diff --git a/crates/rspack_core/src/stats/mod.rs b/crates/rspack_core/src/stats/mod.rs index ddf0bfed057b..32f3560f9e65 100644 --- a/crates/rspack_core/src/stats/mod.rs +++ b/crates/rspack_core/src/stats/mod.rs @@ -17,9 +17,9 @@ mod r#struct; pub use r#struct::*; use crate::{ - BoxModule, BoxRuntimeModule, Chunk, ChunkGroupOrderKey, ChunkGroupUkey, ChunkUkey, Compilation, - ExecutedRuntimeModule, LogType, ModuleGraph, ModuleIdentifier, ProvidedExports, SourceType, - UsedExports, + BoxModule, BoxRuntimeModule, Chunk, ChunkGraph, ChunkGroupOrderKey, ChunkGroupUkey, ChunkUkey, + Compilation, ExecutedRuntimeModule, LogType, ModuleGraph, ModuleIdentifier, ProvidedExports, + SourceType, UsedExports, }; #[derive(Debug, Clone)] @@ -337,10 +337,7 @@ impl Stats<'_> { let module_id = origin .module_id .map(|identifier| { - self - .compilation - .chunk_graph - .get_module_id(identifier) + ChunkGraph::get_module_id(&self.compilation.module_ids, identifier) .map(|s| s.to_string()) .unwrap_or_default() }) @@ -573,7 +570,7 @@ impl Stats<'_> { let module_trace = get_module_trace( module_identifier, &self.compilation.get_module_graph(), - &self.compilation.chunk_graph, + &self.compilation, &self.compilation.options, ); StatsError { @@ -623,7 +620,7 @@ impl Stats<'_> { let module_trace = get_module_trace( module_identifier, &self.compilation.get_module_graph(), - &self.compilation.chunk_graph, + &self.compilation, &self.compilation.options, ); @@ -836,7 +833,7 @@ impl Stats<'_> { stats.id = if executed { None } else { - self.compilation.chunk_graph.get_module_id(identifier) + ChunkGraph::get_module_id(&self.compilation.module_ids, identifier) }; stats.issuer_id = issuer_id.and_then(|i| i); diff --git a/crates/rspack_core/src/stats/utils.rs b/crates/rspack_core/src/stats/utils.rs index 671a61e2ee3d..80142074f64e 100644 --- a/crates/rspack_core/src/stats/utils.rs +++ b/crates/rspack_core/src/stats/utils.rs @@ -43,7 +43,7 @@ pub fn get_stats_module_name_and_id<'s, 'c>( ) -> (Cow<'s, str>, Option<&'c str>) { let identifier = module.identifier(); let name = module.readable_identifier(&compilation.options.context); - let id = compilation.chunk_graph.get_module_id(identifier); + let id = ChunkGraph::get_module_id(&compilation.module_ids, identifier); (name, id) } @@ -152,7 +152,7 @@ pub fn get_chunk_relations( pub fn get_module_trace( module_identifier: Option, module_graph: &ModuleGraph, - chunk_graph: &ChunkGraph, + compilation: &Compilation, options: &CompilerOptions, ) -> Vec { let mut module_trace = vec![]; @@ -174,8 +174,7 @@ pub fn get_module_trace( name: origin_module .readable_identifier(&options.context) .to_string(), - id: chunk_graph - .get_module_id(origin_module.identifier()) + id: ChunkGraph::get_module_id(&compilation.module_ids, origin_module.identifier()) .map(|s| s.to_string()), }; @@ -184,8 +183,7 @@ pub fn get_module_trace( name: current_module .readable_identifier(&options.context) .to_string(), - id: chunk_graph - .get_module_id(current_module.identifier()) + id: ChunkGraph::get_module_id(&compilation.module_ids, current_module.identifier()) .map(|s| s.to_string()), }; diff --git a/crates/rspack_ids/src/deterministic_chunk_ids_plugin.rs b/crates/rspack_ids/src/deterministic_chunk_ids_plugin.rs index 6b09a2028b5d..c24882ede999 100644 --- a/crates/rspack_ids/src/deterministic_chunk_ids_plugin.rs +++ b/crates/rspack_ids/src/deterministic_chunk_ids_plugin.rs @@ -48,7 +48,7 @@ fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_error: assign_deterministic_ids( chunks, |chunk| get_full_chunk_name(chunk, chunk_graph, &module_graph, &context), - |a, b| compare_chunks_natural(chunk_graph, &module_graph, a, b), + |a, b| compare_chunks_natural(chunk_graph, &module_graph, &compilation.module_ids, a, b), |chunk, id| { let size = used_ids.len(); used_ids.insert(id.to_string()); diff --git a/crates/rspack_ids/src/deterministic_module_ids_plugin.rs b/crates/rspack_ids/src/deterministic_module_ids_plugin.rs index 19071c93519c..31f96614912f 100644 --- a/crates/rspack_ids/src/deterministic_module_ids_plugin.rs +++ b/crates/rspack_ids/src/deterministic_module_ids_plugin.rs @@ -1,5 +1,6 @@ use rspack_core::{ - ApplyContext, Compilation, CompilationModuleIds, CompilerOptions, Plugin, PluginContext, + ApplyContext, ChunkGraph, Compilation, CompilationModuleIds, CompilerOptions, Plugin, + PluginContext, }; use rspack_error::Result; use rspack_hook::{plugin, plugin_hook}; @@ -17,7 +18,7 @@ pub struct DeterministicModuleIdsPlugin; fn module_ids(&self, compilation: &mut Compilation) -> Result<()> { let (mut used_ids, modules) = get_used_module_ids_and_modules(compilation, None); - let mut chunk_graph = std::mem::take(&mut compilation.chunk_graph); + let mut module_ids = std::mem::take(&mut compilation.module_ids); let context = compilation.options.context.as_ref(); let max_length = 3; let fail_on_conflict = false; @@ -40,7 +41,7 @@ fn module_ids(&self, compilation: &mut Compilation) -> Result<()> { conflicts += 1; return false; } - chunk_graph.set_module_id(module.identifier(), id.to_string()); + ChunkGraph::set_module_id(&mut module_ids, module.identifier(), id.to_string()); true }, &[usize::pow(10, max_length)], @@ -48,7 +49,7 @@ fn module_ids(&self, compilation: &mut Compilation) -> Result<()> { used_ids_len, salt, ); - compilation.chunk_graph = chunk_graph; + compilation.module_ids = module_ids; if fail_on_conflict && conflicts > 0 { // TODO: better error msg panic!("Assigning deterministic module ids has lead to conflicts {conflicts}"); diff --git a/crates/rspack_ids/src/id_helpers.rs b/crates/rspack_ids/src/id_helpers.rs index b41845b1c0ca..e9475b3e1695 100644 --- a/crates/rspack_ids/src/id_helpers.rs +++ b/crates/rspack_ids/src/id_helpers.rs @@ -12,7 +12,7 @@ use itertools::{ }; use rayon::prelude::*; use regex::Regex; -use rspack_collections::DatabaseItem; +use rspack_collections::{DatabaseItem, IdentifierMap}; use rspack_core::{ compare_runtime, BoxModule, Chunk, ChunkGraph, ChunkUkey, Compilation, ModuleGraph, ModuleIdentifier, @@ -47,7 +47,7 @@ pub fn get_used_module_ids_and_modules( .values() .filter(|m| m.need_id()) .for_each(|module| { - let module_id = chunk_graph.get_module_id(module.identifier()); + let module_id = ChunkGraph::get_module_id(&compilation.module_ids, module.identifier()); if let Some(module_id) = module_id { used_ids.insert(module_id.to_string()); } else { @@ -289,15 +289,15 @@ pub fn assign_deterministic_ids( pub fn assign_ascending_module_ids( used_ids: &HashSet, modules: Vec<&BoxModule>, - chunk_graph: &mut ChunkGraph, + module_ids: &mut IdentifierMap, ) { let mut next_id = 0; let mut assign_id = |module: &BoxModule| { - if chunk_graph.get_module_id(module.identifier()).is_none() { + if ChunkGraph::get_module_id(&module_ids, module.identifier()).is_none() { while used_ids.contains(&next_id.to_string()) { next_id += 1; } - chunk_graph.set_module_id(module.identifier(), next_id.to_string()); + ChunkGraph::set_module_id(module_ids, module.identifier(), next_id.to_string()); next_id += 1; } }; @@ -491,6 +491,7 @@ pub fn assign_ascending_chunk_ids(chunks: &[ChunkUkey], compilation: &mut Compil fn compare_chunks_by_modules( chunk_graph: &ChunkGraph, module_graph: &ModuleGraph, + module_ids: &IdentifierMap, a: &Chunk, b: &Chunk, ) -> Ordering { @@ -502,8 +503,8 @@ fn compare_chunks_by_modules( .zip_longest(b_modules) .find_map(|pair| match pair { Both(a_module, b_module) => { - let a_module_id = chunk_graph.get_module_id(a_module.identifier()); - let b_module_id = chunk_graph.get_module_id(b_module.identifier()); + let a_module_id = ChunkGraph::get_module_id(module_ids, a_module.identifier()); + let b_module_id = ChunkGraph::get_module_id(module_ids, b_module.identifier()); let ordering = compare_ids( a_module_id.unwrap_or_default(), b_module_id.unwrap_or_default(), @@ -530,6 +531,7 @@ fn compare_chunks_by_modules( pub fn compare_chunks_natural( chunk_graph: &ChunkGraph, module_graph: &ModuleGraph, + module_ids: &IdentifierMap, a: &Chunk, b: &Chunk, ) -> Ordering { @@ -543,5 +545,5 @@ pub fn compare_chunks_natural( return runtime_ordering; } - compare_chunks_by_modules(chunk_graph, module_graph, a, b) + compare_chunks_by_modules(chunk_graph, module_graph, module_ids, a, b) } diff --git a/crates/rspack_ids/src/named_chunk_ids_plugin.rs b/crates/rspack_ids/src/named_chunk_ids_plugin.rs index 45f254ea658c..d3ed4c9302b4 100644 --- a/crates/rspack_ids/src/named_chunk_ids_plugin.rs +++ b/crates/rspack_ids/src/named_chunk_ids_plugin.rs @@ -51,7 +51,7 @@ fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_error: chunks, |chunk| get_short_chunk_name(chunk, chunk_graph, &context, &self.delimiter, &module_graph), |chunk, _| get_long_chunk_name(chunk, chunk_graph, &context, &self.delimiter, &module_graph), - |a, b| compare_chunks_natural(chunk_graph, &module_graph, a, b), + |a, b| compare_chunks_natural(chunk_graph, &module_graph, &compilation.module_ids, a, b), &mut used_ids, |chunk, name| { chunk_id_to_name.insert(chunk.ukey(), name); diff --git a/crates/rspack_ids/src/named_module_ids_plugin.rs b/crates/rspack_ids/src/named_module_ids_plugin.rs index 6ad71a79b814..c28437e949c5 100644 --- a/crates/rspack_ids/src/named_module_ids_plugin.rs +++ b/crates/rspack_ids/src/named_module_ids_plugin.rs @@ -1,6 +1,6 @@ use rspack_core::{ - compare_modules_by_identifier, ApplyContext, CompilationModuleIds, CompilerOptions, Plugin, - PluginContext, + compare_modules_by_identifier, ApplyContext, ChunkGraph, CompilationModuleIds, CompilerOptions, + Plugin, PluginContext, }; use rspack_error::Result; use rspack_hook::{plugin, plugin_hook}; @@ -19,7 +19,7 @@ fn module_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<()> { // Align with https://github.com/webpack/webpack/blob/4b4ca3bb53f36a5b8fc6bc1bd976ed7af161bd80/lib/ids/NamedModuleIdsPlugin.js let context: &str = compilation.options.context.as_ref(); let (mut used_ids, modules) = get_used_module_ids_and_modules(compilation, None); - let mut chunk_graph = std::mem::take(&mut compilation.chunk_graph); + let mut module_ids = std::mem::take(&mut compilation.module_ids); let module_graph = compilation.get_module_graph(); let modules = modules .into_iter() @@ -32,13 +32,15 @@ fn module_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<()> { |module, short_name| get_long_module_name(short_name, module, context), |a, b| compare_modules_by_identifier(a, b), &mut used_ids, - |m, name| chunk_graph.set_module_id(m.identifier(), name), + |m, name| { + ChunkGraph::set_module_id(&mut module_ids, m.identifier(), name); + }, ); if !unnamed_modules.is_empty() { - assign_ascending_module_ids(&used_ids, unnamed_modules, &mut chunk_graph) + assign_ascending_module_ids(&used_ids, unnamed_modules, &mut module_ids) } - compilation.chunk_graph = chunk_graph; + compilation.module_ids = module_ids; Ok(()) } diff --git a/crates/rspack_ids/src/natural_chunk_ids_plugin.rs b/crates/rspack_ids/src/natural_chunk_ids_plugin.rs index 5dc9647cf1e5..b000b383533e 100644 --- a/crates/rspack_ids/src/natural_chunk_ids_plugin.rs +++ b/crates/rspack_ids/src/natural_chunk_ids_plugin.rs @@ -13,6 +13,7 @@ pub struct NaturalChunkIdsPlugin; #[plugin_hook(CompilationChunkIds for NaturalChunkIdsPlugin)] fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_error::Result<()> { + let module_ids = &compilation.module_ids; let chunk_graph = &compilation.chunk_graph; let module_graph = &compilation.get_module_graph(); @@ -20,7 +21,7 @@ fn chunk_ids(&self, compilation: &mut rspack_core::Compilation) -> rspack_error: .chunk_by_ukey .values() .map(|chunk| chunk as &Chunk) - .sorted_unstable_by(|a, b| compare_chunks_natural(chunk_graph, module_graph, a, b)) + .sorted_unstable_by(|a, b| compare_chunks_natural(chunk_graph, module_graph, module_ids, a, b)) .map(|chunk| chunk.ukey()) .collect::>(); diff --git a/crates/rspack_ids/src/natural_module_ids_plugin.rs b/crates/rspack_ids/src/natural_module_ids_plugin.rs index 85041775a1d3..d2d1e7c3102f 100644 --- a/crates/rspack_ids/src/natural_module_ids_plugin.rs +++ b/crates/rspack_ids/src/natural_module_ids_plugin.rs @@ -15,7 +15,7 @@ pub struct NaturalModuleIdsPlugin; fn module_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<()> { let (used_ids, mut modules_in_natural_order) = get_used_module_ids_and_modules(compilation, None); - let mut chunk_graph = std::mem::take(&mut compilation.chunk_graph); + let mut module_ids = std::mem::take(&mut compilation.module_ids); let module_graph = compilation.get_module_graph(); modules_in_natural_order @@ -26,9 +26,9 @@ fn module_ids(&self, compilation: &mut rspack_core::Compilation) -> Result<()> { .filter_map(|i| module_graph.module_by_identifier(&i)) .collect::>(); - assign_ascending_module_ids(&used_ids, modules_in_natural_order, &mut chunk_graph); + assign_ascending_module_ids(&used_ids, modules_in_natural_order, &mut module_ids); - compilation.chunk_graph = chunk_graph; + compilation.module_ids = module_ids; Ok(()) } diff --git a/crates/rspack_plugin_asset/src/lib.rs b/crates/rspack_plugin_asset/src/lib.rs index 7a9174033cd9..166221f0b30f 100644 --- a/crates/rspack_plugin_asset/src/lib.rs +++ b/crates/rspack_plugin_asset/src/lib.rs @@ -246,7 +246,10 @@ impl AssetParserAndGenerator { compilation.get_asset_path_with_info( asset_filename_template, PathData::default() - .module_id_optional(compilation.chunk_graph.get_module_id(module.id())) + .module_id_optional(ChunkGraph::get_module_id( + &compilation.module_ids, + module.id(), + )) .content_hash_optional(contenthash) .hash_optional(contenthash) .filename(source_file_name), @@ -264,7 +267,10 @@ impl AssetParserAndGenerator { let (public_path, info) = compilation.get_asset_path_with_info( template, PathData::default() - .module_id_optional(compilation.chunk_graph.get_module_id(module.id())) + .module_id_optional(ChunkGraph::get_module_id( + &compilation.module_ids, + module.id(), + )) .content_hash_optional(contenthash) .hash_optional(contenthash) .filename(source_file_name), diff --git a/crates/rspack_plugin_css/src/plugin/impl_plugin_for_css_plugin.rs b/crates/rspack_plugin_css/src/plugin/impl_plugin_for_css_plugin.rs index fdf38638997d..7a7c734cbd0c 100644 --- a/crates/rspack_plugin_css/src/plugin/impl_plugin_for_css_plugin.rs +++ b/crates/rspack_plugin_css/src/plugin/impl_plugin_for_css_plugin.rs @@ -14,10 +14,10 @@ use rspack_core::{ SourceType, }; use rspack_core::{ - AssetInfo, ChunkLoading, ChunkLoadingType, ChunkUkey, Compilation, CompilationContentHash, - CompilationParams, CompilationRenderManifest, CompilationRuntimeRequirementInTree, - CompilerCompilation, CompilerOptions, DependencyType, LibIdentOptions, ModuleGraph, PublicPath, - RuntimeGlobals, SelfModuleFactory, + AssetInfo, ChunkGraph, ChunkLoading, ChunkLoadingType, ChunkUkey, Compilation, + CompilationContentHash, CompilationParams, CompilationRenderManifest, + CompilationRuntimeRequirementInTree, CompilerCompilation, CompilerOptions, DependencyType, + LibIdentOptions, ModuleGraph, PublicPath, RuntimeGlobals, SelfModuleFactory, }; use rspack_error::{Diagnostic, Result}; use rspack_hash::RspackHash; @@ -284,7 +284,7 @@ async fn content_hash( compilation .code_generation_results .get_hash(&m.identifier(), Some(chunk.runtime())), - compilation.chunk_graph.get_module_id(m.identifier()), + ChunkGraph::get_module_id(&compilation.module_ids, m.identifier()), ) }) .for_each(|(current, id)| { diff --git a/crates/rspack_plugin_css/src/utils.rs b/crates/rspack_plugin_css/src/utils.rs index 0b7cc7634b85..b4fa7daaea60 100644 --- a/crates/rspack_plugin_css/src/utils.rs +++ b/crates/rspack_plugin_css/src/utils.rs @@ -9,6 +9,7 @@ use heck::{ToKebabCase, ToLowerCamelCase}; use indexmap::{IndexMap, IndexSet}; use regex::{Captures, Regex}; use rspack_core::rspack_sources::{ConcatSource, RawSource}; +use rspack_core::ChunkGraph; use rspack_core::{ to_identifier, Compilation, CompilerOptions, GenerateContext, PathData, ResourceData, RuntimeGlobals, @@ -182,7 +183,11 @@ pub fn css_modules_exports_to_string<'a>( }) .expect("should have css from module"); - let from = serde_json::to_string(from.id(&compilation.chunk_graph)).expect("TODO:"); + let from = serde_json::to_string( + ChunkGraph::get_module_id(&compilation.module_ids, from.module_identifier) + .expect("should have module"), + ) + .expect("should json stringify module id"); runtime_requirements.insert(RuntimeGlobals::REQUIRE); format!( "{}({from})[{}]", @@ -245,7 +250,11 @@ pub fn css_modules_exports_to_concatenate_module_string<'a>( }) .expect("should have css from module"); - let from = serde_json::to_string(from.id(&compilation.chunk_graph)).expect("TODO:"); + let from = serde_json::to_string( + ChunkGraph::get_module_id(&compilation.module_ids, from.module_identifier) + .expect("should have module"), + ) + .expect("should json stringify module id"); format!( "{}({from})[{}]", RuntimeGlobals::REQUIRE, diff --git a/crates/rspack_plugin_devtool/src/module_filename_helpers.rs b/crates/rspack_plugin_devtool/src/module_filename_helpers.rs index a6357f22dbf8..40b8a72aa63b 100644 --- a/crates/rspack_plugin_devtool/src/module_filename_helpers.rs +++ b/crates/rspack_plugin_devtool/src/module_filename_helpers.rs @@ -6,7 +6,7 @@ use std::{ use cow_utils::CowUtils; use regex::{Captures, Regex}; -use rspack_core::{contextify, Compilation, OutputOptions}; +use rspack_core::{contextify, ChunkGraph, Compilation, OutputOptions}; use rspack_error::Result; use rspack_hash::RspackHash; use rustc_hash::FxHashMap as HashMap; @@ -57,11 +57,7 @@ impl ModuleFilenameHelpers { output_options: &OutputOptions, namespace: &str, ) -> ModuleFilenameTemplateFnCtx { - let Compilation { - chunk_graph, - options, - .. - } = compilation; + let Compilation { options, .. } = compilation; let context = &options.context; match module_or_source { @@ -78,8 +74,7 @@ impl ModuleFilenameHelpers { let short_identifier = module.readable_identifier(context).to_string(); let identifier = contextify(context, module_identifier); - let module_id = chunk_graph - .get_module_id(*module_identifier) + let module_id = ChunkGraph::get_module_id(&compilation.module_ids, *module_identifier) .map(|s| s.to_string()) .unwrap_or_default(); let absolute_resource_path = "".to_string(); diff --git a/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs b/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs index 21df8564541f..f8d2342fc346 100644 --- a/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs +++ b/crates/rspack_plugin_dll/src/lib_manifest_plugin.rs @@ -4,7 +4,7 @@ use std::sync::Arc; use rspack_collections::DatabaseItem; use rspack_core::{ rspack_sources::{BoxSource, RawSource}, - ApplyContext, Compilation, CompilationAssets, CompilerEmit, CompilerOptions, Context, + ApplyContext, ChunkGraph, Compilation, CompilationAssets, CompilerEmit, CompilerOptions, Context, EntryDependency, Filename, LibIdentOptions, PathData, Plugin, PluginContext, ProvidedExports, SourceType, }; @@ -142,7 +142,7 @@ async fn emit(&self, compilation: &mut Compilation) -> Result<()> { _ => None, }; - let id = chunk_graph.get_module_id(module.identifier()); + let id = ChunkGraph::get_module_id(&compilation.module_ids, module.identifier()); let build_meta = module.build_meta(); diff --git a/crates/rspack_plugin_javascript/src/dependency/commonjs/module_decorator_dependency.rs b/crates/rspack_plugin_javascript/src/dependency/commonjs/module_decorator_dependency.rs index 12df0e6f7b1f..6725d26ca00d 100644 --- a/crates/rspack_plugin_javascript/src/dependency/commonjs/module_decorator_dependency.rs +++ b/crates/rspack_plugin_javascript/src/dependency/commonjs/module_decorator_dependency.rs @@ -1,8 +1,8 @@ use rspack_core::{ - create_exports_object_referenced, create_no_exports_referenced, AsContextDependency, Compilation, - Dependency, DependencyId, DependencyTemplate, DependencyType, InitFragmentKey, InitFragmentStage, - ModuleDependency, NormalInitFragment, RuntimeGlobals, RuntimeSpec, TemplateContext, - TemplateReplaceSource, + create_exports_object_referenced, create_no_exports_referenced, AsContextDependency, ChunkGraph, + Compilation, Dependency, DependencyId, DependencyTemplate, DependencyType, InitFragmentKey, + InitFragmentStage, ModuleDependency, NormalInitFragment, RuntimeGlobals, RuntimeSpec, + TemplateContext, TemplateReplaceSource, }; use rspack_util::ext::DynHash; @@ -55,9 +55,7 @@ impl DependencyTemplate for ModuleDecoratorDependency { let module_argument = module.get_module_argument(); // ref: tests/webpack-test/cases/scope-hoisting/issue-5096 will return a `null` as module id - let module_id = compilation - .chunk_graph - .get_module_id(module.identifier()) + let module_id = ChunkGraph::get_module_id(&compilation.module_ids, module.identifier()) .map(|s| s.to_string()) .unwrap_or_default(); diff --git a/crates/rspack_plugin_javascript/src/plugin/impl_plugin_for_js_plugin.rs b/crates/rspack_plugin_javascript/src/plugin/impl_plugin_for_js_plugin.rs index f08c917d1806..376869e7b831 100644 --- a/crates/rspack_plugin_javascript/src/plugin/impl_plugin_for_js_plugin.rs +++ b/crates/rspack_plugin_javascript/src/plugin/impl_plugin_for_js_plugin.rs @@ -205,7 +205,7 @@ async fn content_hash( compilation .code_generation_results .get_hash(&mgm.identifier(), Some(chunk.runtime())), - compilation.chunk_graph.get_module_id(mgm.identifier()), + ChunkGraph::get_module_id(&compilation.module_ids, mgm.identifier()), ) }) .for_each(|(current, id)| { diff --git a/crates/rspack_plugin_javascript/src/plugin/mod.rs b/crates/rspack_plugin_javascript/src/plugin/mod.rs index 49df818596c8..1b81a5069e0e 100644 --- a/crates/rspack_plugin_javascript/src/plugin/mod.rs +++ b/crates/rspack_plugin_javascript/src/plugin/mod.rs @@ -394,10 +394,7 @@ impl JsPlugin { buf2.push("// This entry module used 'module' so it can't be inlined".into()); } - let module_id = compilation - .get_module_graph() - .module_graph_module_by_identifier(module) - .map(|module| module.id(&compilation.chunk_graph)) + let module_id = ChunkGraph::get_module_id(&compilation.module_ids, *module) .expect("should have module id"); let mut module_id_expr = serde_json::to_string(module_id).expect("invalid module_id"); if runtime_requirements.contains(RuntimeGlobals::ENTRY_MODULE_ID) { diff --git a/crates/rspack_plugin_javascript/src/runtime.rs b/crates/rspack_plugin_javascript/src/runtime.rs index a25b97409400..3317ce3ad934 100644 --- a/crates/rspack_plugin_javascript/src/runtime.rs +++ b/crates/rspack_plugin_javascript/src/runtime.rs @@ -125,9 +125,7 @@ pub fn render_module( if need_require { args.push(RuntimeGlobals::REQUIRE.to_string()); } - let module_id = compilation - .chunk_graph - .get_module_id(module.identifier()) + let module_id = ChunkGraph::get_module_id(&compilation.module_ids, module.identifier()) .expect("should have module_id in render_module"); sources.add(RawSource::from( serde_json::to_string(&module_id).map_err(|e| error!(e.to_string()))?, diff --git a/crates/rspack_plugin_lazy_compilation/src/module.rs b/crates/rspack_plugin_lazy_compilation/src/module.rs index 8f08c8a97dc7..5d4f5cf07723 100644 --- a/crates/rspack_plugin_lazy_compilation/src/module.rs +++ b/crates/rspack_plugin_lazy_compilation/src/module.rs @@ -6,7 +6,7 @@ use rspack_core::{ impl_module_meta_info, module_namespace_promise, module_update_hash, rspack_sources::{RawSource, Source}, AsyncDependenciesBlock, AsyncDependenciesBlockIdentifier, BoxDependency, BuildContext, BuildInfo, - BuildMeta, BuildResult, CodeGenerationData, CodeGenerationResult, Compilation, + BuildMeta, BuildResult, ChunkGraph, CodeGenerationData, CodeGenerationResult, Compilation, ConcatenationScope, Context, DependenciesBlock, DependencyId, DependencyRange, FactoryMeta, Module, ModuleFactoryCreateData, ModuleIdentifier, ModuleLayer, ModuleType, RuntimeGlobals, RuntimeSpec, SourceType, TemplateContext, @@ -187,7 +187,6 @@ impl Module for LazyCompilationProxyModule { let client_dep_id = self.dependencies[0]; let module_graph = &compilation.get_module_graph(); - let chunk_graph = &compilation.chunk_graph; let client_module = module_graph .module_identifier_by_dependency_id(&client_dep_id) @@ -197,9 +196,7 @@ impl Module for LazyCompilationProxyModule { let client = format!( "var client = __webpack_require__(\"{}\");\nvar data = \"{}\"", - chunk_graph - .get_module_id(*client_module) - .as_ref() + ChunkGraph::get_module_id(&compilation.module_ids, *client_module) .expect("should have module id"), self.data ); @@ -253,9 +250,7 @@ impl Module for LazyCompilationProxyModule { "import()", false ), - chunk_graph - .get_module_id(*module) - .as_ref() + ChunkGraph::get_module_id(&compilation.module_ids, *module) .expect("should have module id") .cow_replace('"', r#"\""#), keep_active, diff --git a/crates/rspack_plugin_library/src/utils.rs b/crates/rspack_plugin_library/src/utils.rs index 2249c247be88..692fe3606890 100644 --- a/crates/rspack_plugin_library/src/utils.rs +++ b/crates/rspack_plugin_library/src/utils.rs @@ -1,6 +1,7 @@ use rspack_collections::Identifiable; use rspack_core::{ - to_identifier, ChunkUkey, Compilation, ExternalModule, ExternalRequest, LibraryOptions, + to_identifier, ChunkGraph, ChunkUkey, Compilation, ExternalModule, ExternalRequest, + LibraryOptions, }; use rspack_error::{error, Result}; @@ -27,11 +28,8 @@ fn inner_external_arguments(modules: &[&ExternalModule], compilation: &Compilati format!( "__WEBPACK_EXTERNAL_MODULE_{}__", to_identifier( - compilation - .get_module_graph() - .module_graph_module_by_identifier(&m.identifier()) - .expect("Module not found") - .id(&compilation.chunk_graph) + ChunkGraph::get_module_id(&compilation.module_ids, m.identifier()) + .expect("should have module id") ) ) }) diff --git a/crates/rspack_plugin_mf/src/container/fallback_module.rs b/crates/rspack_plugin_mf/src/container/fallback_module.rs index ef88c88c79ec..dfb5a82b0a32 100644 --- a/crates/rspack_plugin_mf/src/container/fallback_module.rs +++ b/crates/rspack_plugin_mf/src/container/fallback_module.rs @@ -6,9 +6,9 @@ use rspack_core::{ impl_module_meta_info, impl_source_map_config, module_update_hash, rspack_sources::{RawSource, Source, SourceExt}, AsyncDependenciesBlockIdentifier, BoxDependency, BuildContext, BuildInfo, BuildMeta, BuildResult, - ChunkUkey, CodeGenerationResult, Compilation, ConcatenationScope, Context, DependenciesBlock, - DependencyId, FactoryMeta, LibIdentOptions, Module, ModuleIdentifier, ModuleType, RuntimeGlobals, - RuntimeSpec, SourceType, + ChunkGraph, ChunkUkey, CodeGenerationResult, Compilation, ConcatenationScope, Context, + DependenciesBlock, DependencyId, FactoryMeta, LibIdentOptions, Module, ModuleIdentifier, + ModuleType, RuntimeGlobals, RuntimeSpec, SourceType, }; use rspack_error::{impl_empty_diagnosable_trait, Diagnostic, Result}; use rspack_util::{itoa, source_map::SourceMapKind}; @@ -158,7 +158,7 @@ impl Module for FallbackModule { .get_dependencies() .iter() .filter_map(|dep| module_graph.get_module_by_dependency_id(dep)) - .filter_map(|module| compilation.chunk_graph.get_module_id(module.identifier())) + .filter_map(|module| ChunkGraph::get_module_id(&compilation.module_ids, module.identifier())) .collect(); let code = format!( r#" diff --git a/crates/rspack_plugin_mf/src/container/remote_module.rs b/crates/rspack_plugin_mf/src/container/remote_module.rs index 44f3053b0182..3eb3e5c79e0a 100644 --- a/crates/rspack_plugin_mf/src/container/remote_module.rs +++ b/crates/rspack_plugin_mf/src/container/remote_module.rs @@ -6,8 +6,9 @@ use rspack_core::{ impl_module_meta_info, impl_source_map_config, module_update_hash, rspack_sources::{RawSource, Source, SourceExt}, AsyncDependenciesBlockIdentifier, BoxDependency, BuildContext, BuildInfo, BuildMeta, BuildResult, - CodeGenerationResult, Compilation, ConcatenationScope, Context, DependenciesBlock, DependencyId, - FactoryMeta, LibIdentOptions, Module, ModuleIdentifier, ModuleType, RuntimeSpec, SourceType, + ChunkGraph, CodeGenerationResult, Compilation, ConcatenationScope, Context, DependenciesBlock, + DependencyId, FactoryMeta, LibIdentOptions, Module, ModuleIdentifier, ModuleType, RuntimeSpec, + SourceType, }; use rspack_error::{impl_empty_diagnosable_trait, Diagnostic, Result}; use rspack_util::source_map::SourceMapKind; @@ -174,7 +175,8 @@ impl Module for RemoteModule { let mut codegen = CodeGenerationResult::default(); let module_graph = compilation.get_module_graph(); let module = module_graph.get_module_by_dependency_id(&self.dependencies[0]); - let id = module.and_then(|m| compilation.chunk_graph.get_module_id(m.identifier())); + let id = + module.and_then(|m| ChunkGraph::get_module_id(&compilation.module_ids, m.identifier())); codegen.add(SourceType::Remote, RawSource::from("").boxed()); codegen.data.insert(CodeGenerationDataShareInit { items: vec![ShareInitData { diff --git a/crates/rspack_plugin_mf/src/container/remote_runtime_module.rs b/crates/rspack_plugin_mf/src/container/remote_runtime_module.rs index 0ae1d6c1887f..58f6505dfdb4 100644 --- a/crates/rspack_plugin_mf/src/container/remote_runtime_module.rs +++ b/crates/rspack_plugin_mf/src/container/remote_runtime_module.rs @@ -2,7 +2,8 @@ use rspack_collections::{Identifiable, Identifier}; use rspack_core::{ impl_runtime_module, rspack_sources::{BoxSource, RawSource, SourceExt}, - ChunkUkey, Compilation, DependenciesBlock, RuntimeModule, RuntimeModuleStage, SourceType, + ChunkGraph, ChunkUkey, Compilation, DependenciesBlock, RuntimeModule, RuntimeModuleStage, + SourceType, }; use rustc_hash::FxHashMap; use serde::Serialize; @@ -55,19 +56,16 @@ impl RuntimeModule for RemoteRuntimeModule { continue; }; let name = m.internal_request.as_str(); - let id = compilation - .chunk_graph - .get_module_id(m.identifier()) + let id = ChunkGraph::get_module_id(&compilation.module_ids, m.identifier()) .expect("should have module_id at ::generate"); let share_scope = m.share_scope.as_str(); let dep = m.get_dependencies()[0]; let external_module = module_graph .get_module_by_dependency_id(&dep) .expect("should have module"); - let external_module_id = compilation - .chunk_graph - .get_module_id(external_module.identifier()) - .expect("should have module_id at ::generate"); + let external_module_id = + ChunkGraph::get_module_id(&compilation.module_ids, external_module.identifier()) + .expect("should have module_id at ::generate"); remotes.push(id.to_string()); id_to_remote_data_mapping.insert( id, diff --git a/crates/rspack_plugin_mf/src/sharing/consume_shared_runtime_module.rs b/crates/rspack_plugin_mf/src/sharing/consume_shared_runtime_module.rs index 92df88db1413..4240528f4cc4 100644 --- a/crates/rspack_plugin_mf/src/sharing/consume_shared_runtime_module.rs +++ b/crates/rspack_plugin_mf/src/sharing/consume_shared_runtime_module.rs @@ -47,9 +47,7 @@ impl RuntimeModule for ConsumeSharedRuntimeModule { let mut module_id_to_consume_data_mapping = FxHashMap::default(); let mut initial_consumes = Vec::new(); let mut add_module = |module: ModuleIdentifier, chunk: &Chunk, ids: &mut Vec| { - let id = compilation - .chunk_graph - .get_module_id(module) + let id = ChunkGraph::get_module_id(&compilation.module_ids, module) .map(|s| s.to_string()) .expect("should have moduleId at ::generate"); ids.push(id.clone()); diff --git a/crates/rspack_plugin_runtime/src/helpers.rs b/crates/rspack_plugin_runtime/src/helpers.rs index 945ef49e9cea..729dc2e5c810 100644 --- a/crates/rspack_plugin_runtime/src/helpers.rs +++ b/crates/rspack_plugin_runtime/src/helpers.rs @@ -23,9 +23,7 @@ pub fn update_hash_for_entry_startup( .get_module_graph() .module_graph_module_by_identifier(module) .map(|module| { - compilation - .chunk_graph - .get_module_id(module.module_identifier) + ChunkGraph::get_module_id(&compilation.module_ids, module.module_identifier) .unwrap_or("null") }) { @@ -152,9 +150,7 @@ pub fn generate_entry_startup( .get_module_graph() .module_graph_module_by_identifier(module) .map(|module| { - compilation - .chunk_graph - .get_module_id(module.module_identifier) + ChunkGraph::get_module_id(&compilation.module_ids, module.module_identifier) .unwrap_or("null") }) { diff --git a/crates/rspack_plugin_runtime/src/module_chunk_format.rs b/crates/rspack_plugin_runtime/src/module_chunk_format.rs index 5376197ec74b..ccfe6490e1f3 100644 --- a/crates/rspack_plugin_runtime/src/module_chunk_format.rs +++ b/crates/rspack_plugin_runtime/src/module_chunk_format.rs @@ -3,8 +3,9 @@ use std::hash::Hash; use async_trait::async_trait; use rspack_core::rspack_sources::{ConcatSource, RawSource, SourceExt}; use rspack_core::{ - ApplyContext, ChunkKind, ChunkUkey, Compilation, CompilationAdditionalChunkRuntimeRequirements, - CompilationParams, CompilerCompilation, CompilerOptions, Plugin, PluginContext, RuntimeGlobals, + ApplyContext, ChunkGraph, ChunkKind, ChunkUkey, Compilation, + CompilationAdditionalChunkRuntimeRequirements, CompilationParams, CompilerCompilation, + CompilerOptions, Plugin, PluginContext, RuntimeGlobals, }; use rspack_error::Result; use rspack_hash::RspackHash; @@ -143,11 +144,8 @@ fn render_chunk( let mut loaded_chunks = HashSet::default(); for (i, (module, entry)) in entries.iter().enumerate() { - let module_id = compilation - .get_module_graph() - .module_graph_module_by_identifier(module) - .map(|module| module.id(&compilation.chunk_graph)) - .expect("should have module id"); + let module_id = + ChunkGraph::get_module_id(&compilation.module_ids, *module).expect("should have module id"); let runtime_chunk = compilation .chunk_group_by_ukey .expect_get(entry) diff --git a/crates/rspack_plugin_wasm/src/parser_and_generator.rs b/crates/rspack_plugin_wasm/src/parser_and_generator.rs index b424d5047b37..a7c042be61f0 100644 --- a/crates/rspack_plugin_wasm/src/parser_and_generator.rs +++ b/crates/rspack_plugin_wasm/src/parser_and_generator.rs @@ -7,10 +7,10 @@ use rspack_collections::Identifier; use rspack_core::rspack_sources::{BoxSource, RawSource, Source, SourceExt}; use rspack_core::DependencyType::WasmImport; use rspack_core::{ - AssetInfo, BoxDependency, BuildMetaExportsType, Compilation, FilenameTemplate, GenerateContext, - Module, ModuleDependency, ModuleGraph, ModuleIdentifier, NormalModule, ParseContext, ParseResult, - ParserAndGenerator, PathData, RuntimeGlobals, SourceType, StaticExportsDependency, - StaticExportsSpec, UsedName, + AssetInfo, BoxDependency, BuildMetaExportsType, ChunkGraph, Compilation, FilenameTemplate, + GenerateContext, Module, ModuleDependency, ModuleGraph, ModuleIdentifier, NormalModule, + ParseContext, ParseResult, ParserAndGenerator, PathData, RuntimeGlobals, SourceType, + StaticExportsDependency, StaticExportsSpec, UsedName, }; use rspack_error::{Diagnostic, IntoTWithDiagnosticArray, Result, TWithDiagnosticArray}; use rspack_util::infallible::ResultInfallibleExt as _; @@ -154,7 +154,6 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator { let mut promises: Vec = vec![]; let module_graph = &compilation.get_module_graph(); - let chunk_graph = &compilation.chunk_graph; module .get_dependencies() @@ -171,7 +170,11 @@ impl ParserAndGenerator for AsyncWasmParserAndGenerator { if let Some(mgm) = mgm { if !dep_modules.contains_key(&mgm.module_identifier) { let import_var = format!("WEBPACK_IMPORTED_MODULE_{}", itoa!(dep_modules.len())); - let val = (import_var.clone(), mgm.id(chunk_graph)); + let val = ( + import_var.clone(), + ChunkGraph::get_module_id(&compilation.module_ids, mgm.module_identifier) + .expect("should have module id"), + ); if ModuleGraph::is_async(compilation, &mgm.module_identifier) { promises.push(import_var);