6060 command
6161 . env
6262 . insert ( "PATH" . to_string ( ) , vp_shared:: format_path_prepended ( manager. get_bin_prefix ( ) ) ) ;
63+ if manager. client == PackageManagerType :: Pnpm {
64+ // Vite+ manages pnpm, so its self-update notification is not useful here.
65+ command. env . insert ( "PNPM_CONFIG_UPDATE_NOTIFIER" . to_string ( ) , "false" . to_string ( ) ) ;
66+ }
6367 }
6468
6569 Ok ( resolution)
@@ -76,7 +80,7 @@ fn parse_version(manager: &PackageManager) -> Result<Version, Error> {
7680#[ cfg( test) ]
7781mod tests {
7882 use super :: * ;
79- use crate :: resolution:: ApproveBuildsArgs ;
83+ use crate :: resolution:: { ApproveBuildsArgs , InstallArgs } ;
8084
8185 fn package_manager ( client : PackageManagerType , version : & str ) -> PackageManager {
8286 let workspace_root = vt_path:: current_dir ( ) . unwrap ( ) ;
@@ -122,4 +126,27 @@ mod tests {
122126 } if version == "latest"
123127 ) ) ;
124128 }
129+
130+ #[ test]
131+ fn only_pnpm_installs_disable_update_notifications ( ) {
132+ for ( client, version, expected) in [
133+ ( PackageManagerType :: Pnpm , "11.25.0" , Some ( "false" ) ) ,
134+ ( PackageManagerType :: Pnpm , "12.3.4" , Some ( "false" ) ) ,
135+ ( PackageManagerType :: Npm , "11.0.0" , None ) ,
136+ ( PackageManagerType :: Yarn , "4.0.0" , None ) ,
137+ ( PackageManagerType :: Bun , "1.0.0" , None ) ,
138+ ] {
139+ let manager = package_manager ( client, version) ;
140+ let resolution = resolve_for_manager ( & manager, InstallArgs :: default ( ) ) . unwrap ( ) ;
141+ let CommandResolution :: Run ( command) = resolution. outcome else {
142+ panic ! ( "expected install command" ) ;
143+ } ;
144+
145+ assert_eq ! (
146+ command. env. get( "PNPM_CONFIG_UPDATE_NOTIFIER" ) . map( String :: as_str) ,
147+ expected,
148+ "{client}@{version}"
149+ ) ;
150+ }
151+ }
125152}
0 commit comments