@@ -6,9 +6,9 @@ use rspack_core::{
66 BoxModule , Compilation , CompilationOptimizeDependencies , ConnectionState , DependencyExtraMeta ,
77 DependencyId , FactoryMeta , Logger , MaybeDynamicTargetExportInfo , ModuleFactoryCreateData ,
88 ModuleGraph , ModuleGraphConnection , ModuleIdentifier , NormalModuleCreateData ,
9- NormalModuleFactoryModule , Plugin , PrefetchExportsInfoMode , ResolvedExportInfoTarget ,
10- SideEffectsBailoutItemWithSpan , SideEffectsDoOptimize , SideEffectsDoOptimizeMoveTarget ,
11- SideEffectsOptimizeArtifact ,
9+ NormalModuleFactoryModule , Plugin , PrefetchExportsInfoMode , RayonConsumer ,
10+ ResolvedExportInfoTarget , SideEffectsBailoutItemWithSpan , SideEffectsDoOptimize ,
11+ SideEffectsDoOptimizeMoveTarget ,
1212 incremental:: { self , IncrementalPasses , Mutation } ,
1313} ;
1414use rspack_error:: Result ;
@@ -644,8 +644,14 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
644644 let logger = compilation. get_logger ( "rspack.SideEffectsFlagPlugin" ) ;
645645 let start = logger. time ( "update connections" ) ;
646646
647- let mut side_effects_optimize_artifact =
648- std:: mem:: take ( & mut compilation. side_effects_optimize_artifact ) ;
647+ let mut side_effects_optimize_artifact = if compilation
648+ . incremental
649+ . passes_enabled ( IncrementalPasses :: SIDE_EFFECTS )
650+ {
651+ std:: mem:: take ( & mut compilation. side_effects_optimize_artifact )
652+ } else {
653+ Default :: default ( )
654+ } ;
649655 let module_graph = compilation. get_module_graph ( ) ;
650656
651657 let all_modules = module_graph. modules ( ) ;
@@ -671,10 +677,14 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
671677 . mutations_read ( IncrementalPasses :: SIDE_EFFECTS )
672678 && !side_effects_optimize_artifact. is_empty ( )
673679 {
674- side_effects_optimize_artifact. retain ( |dependency_id, _ | {
675- module_graph
680+ side_effects_optimize_artifact. retain ( |dependency_id, do_optimize | {
681+ let dep_exist = module_graph
676682 . connection_by_dependency_id ( dependency_id)
677- . is_some ( )
683+ . is_some ( ) ;
684+ let target_module_exist = module_graph
685+ . module_by_identifier ( & do_optimize. target_module )
686+ . is_some ( ) ;
687+ dep_exist && target_module_exist
678688 } ) ;
679689
680690 fn affected_incoming_modules (
@@ -731,7 +741,7 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
731741 logger. time_end ( inner_start) ;
732742
733743 let inner_start = logger. time ( "find optimizable connections" ) ;
734- let artifact : SideEffectsOptimizeArtifact = modules
744+ modules
735745 . par_iter ( )
736746 . filter ( |module| side_effects_state_map[ module] == ConnectionState :: Active ( false ) )
737747 . flat_map ( |module| {
@@ -745,21 +755,16 @@ async fn optimize_dependencies(&self, compilation: &mut Compilation) -> Result<O
745755 can_optimize_connection ( connection, & side_effects_state_map, & module_graph) ,
746756 )
747757 } )
748- . collect ( ) ;
758+ . consume ( |( dep_id, can_optimize) | {
759+ if let Some ( do_optimize) = can_optimize {
760+ side_effects_optimize_artifact. insert ( dep_id, do_optimize) ;
761+ } else {
762+ side_effects_optimize_artifact. remove ( & dep_id) ;
763+ }
764+ } ) ;
749765 logger. time_end ( inner_start) ;
750766
751- let mut do_optimizes: Vec < ( DependencyId , SideEffectsDoOptimize ) > = if compilation
752- . incremental
753- . passes_enabled ( IncrementalPasses :: SIDE_EFFECTS )
754- {
755- side_effects_optimize_artifact. extend ( artifact) ;
756- side_effects_optimize_artifact. clone ( )
757- } else {
758- artifact
759- }
760- . into_iter ( )
761- . filter_map ( |( connection, do_optimize) | do_optimize. map ( |i| ( connection, i) ) )
762- . collect ( ) ;
767+ let mut do_optimizes = side_effects_optimize_artifact. clone ( ) ;
763768
764769 let inner_start = logger. time ( "do optimize connections" ) ;
765770 let mut do_optimized_count = 0 ;
0 commit comments