@@ -5,7 +5,7 @@ use rspack_core::{
55 Compilation , CompilationFinishModules , DependencyType , Logger , ModuleGraph , ModuleIdentifier ,
66 Plugin ,
77 collect_module_graph_effects:: artifact:: CollectModuleGraphEffectsArtifact ,
8- incremental:: { IncrementalPasses , Mutation } ,
8+ incremental:: { IncrementalPasses , Mutation , Mutations } ,
99} ;
1010use rspack_error:: Result ;
1111use rspack_hook:: { plugin, plugin_hook} ;
@@ -54,25 +54,32 @@ async fn finish_modules(
5454 }
5555 }
5656
57- set_sync_modules ( compilation, sync_modules, artifact) ;
58- set_async_modules ( compilation, async_modules, artifact) ;
57+ let mut collect_mutations = Mutations :: default ( ) ;
58+ set_sync_modules ( compilation, sync_modules, artifact, & mut collect_mutations) ;
59+ set_async_modules ( compilation, async_modules, artifact, & mut collect_mutations) ;
60+
5961 if compilation
6062 . incremental
6163 . mutations_readable ( IncrementalPasses :: INFER_ASYNC_MODULES )
6264 {
6365 let logger = compilation. get_logger ( "rspack.incremental.inferAsyncModules" ) ;
6466 logger. log ( format ! (
6567 "{} modules are updated by set_async" ,
66- artifact . mutations . len( )
68+ collect_mutations . len( )
6769 ) ) ;
6870 }
71+ for mutation in collect_mutations. into_iter ( ) {
72+ artifact. mutations . add ( mutation) ;
73+ }
6974 Ok ( ( ) )
7075}
71-
76+ // we need to calculate mutations for inferAsyncModules pass separately
77+ // so make sure use collect_mutations to collect mutations other than artifact.mutations
7278fn set_sync_modules (
7379 compilation : & mut Compilation ,
7480 modules : LinkedHashSet < ModuleIdentifier > ,
7581 collect_module_graph_effects_artifact : & mut CollectModuleGraphEffectsArtifact ,
82+ collect_mutations : & mut Mutations ,
7683) {
7784 let module_graph = compilation. get_module_graph ( ) ;
7885 let outgoing_connections = modules
@@ -118,9 +125,7 @@ fn set_sync_modules(
118125 module,
119126 false ,
120127 ) {
121- collect_module_graph_effects_artifact
122- . mutations
123- . add ( Mutation :: ModuleSetAsync { module } ) ;
128+ collect_mutations. add ( Mutation :: ModuleSetAsync { module } ) ;
124129 let module_graph = compilation. get_module_graph ( ) ;
125130 module_graph
126131 . get_incoming_connections ( & module)
@@ -148,13 +153,14 @@ fn set_async_modules(
148153 compilation : & mut Compilation ,
149154 modules : LinkedHashSet < ModuleIdentifier > ,
150155 artifact : & mut CollectModuleGraphEffectsArtifact ,
156+ collect_mutations : & mut Mutations ,
151157) {
152158 let mut queue = modules;
153159 let mut visited = IdentifierSet :: from_iter ( queue. iter ( ) . copied ( ) ) ;
154160
155161 while let Some ( module) = queue. pop_front ( ) {
156162 if ModuleGraph :: set_async ( artifact, module, true ) {
157- artifact . mutations . add ( Mutation :: ModuleSetAsync { module } ) ;
163+ collect_mutations . add ( Mutation :: ModuleSetAsync { module } ) ;
158164 }
159165 let module_graph = compilation. get_module_graph ( ) ;
160166 module_graph
0 commit comments