@@ -299,18 +299,23 @@ pub fn cleanup<Telem: Telemetry>(paths: &ProjectPaths, telemetry: Telem) -> Resu
299299 let changes = PackageChanges :: between_manifests ( & old_manifest, & manifest) ;
300300 telemetry. resolved_package_versions ( & changes) ;
301301
302- // Invalidate build caches after removing package
303- let target = config. target ;
304- let name = config. name . clone ( ) ;
305-
306- // We need to clean build directory for the top level package for both dev
307- // and prod modes
308- for mode in [ Mode :: Dev , Mode :: Prod ] {
309- let lock = BuildLock :: new_target ( paths, mode, target) ?;
310- let _guard = lock. lock ( & telemetry) ?;
311-
312- let build_directory_path = paths. build_directory_for_package ( mode, target, & name) ;
313- fs:: delete_directory ( build_directory_path. as_ref ( ) ) ?;
302+ // Cleanup build cache of the root package if there are some changes.
303+ // Without this, if a removed dependency is still used, teh build will
304+ // succeed, resulting in runtime crash due to missing files.
305+ if changes. any_changes ( ) {
306+ tracing:: debug!( "cleaning_root_package_build_cache" ) ;
307+ for mode in Mode :: iter ( ) {
308+ for target in Target :: iter ( ) {
309+ let lock = BuildLock :: new_target ( paths, mode, target) ?;
310+ let _guard = lock. lock ( & telemetry) ?;
311+
312+ let build_directory_path =
313+ paths. build_directory_for_package ( mode, target, & config. name ) ;
314+ if build_directory_path. exists ( ) {
315+ fs:: delete_directory ( build_directory_path. as_ref ( ) ) ?;
316+ }
317+ }
318+ }
314319 }
315320
316321 Ok ( manifest)
0 commit comments