diff --git a/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/bin.js b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/bin.js new file mode 100644 index 0000000000..09a50e9911 --- /dev/null +++ b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/bin.js @@ -0,0 +1 @@ +console.log('The package is installed successfully'); diff --git a/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/package.json b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/package.json new file mode 100644 index 0000000000..8027860c5c --- /dev/null +++ b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/package.json @@ -0,0 +1,6 @@ +{ + "name": "global-local-no-version", + "bin": { + "global-local-no-version": "./bin.js" + } +} diff --git a/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots.toml b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots.toml new file mode 100644 index 0000000000..547ab5fc1a --- /dev/null +++ b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots.toml @@ -0,0 +1,10 @@ +[[case]] +name = "command_env_install_global_local_no_version" +vp = "global" +steps = [ + { argv = ["vp", "install", "-g", "."], continue-on-failure = true }, + { argv = ["vp", "list", "-g", "global-local-no-version"], continue-on-failure = true }, +] +after = [ + { argv = ["vp", "remove", "-g", "global-local-no-version"], continue-on-failure = true }, +] diff --git a/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots/command_env_install_global_local_no_version.md b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots/command_env_install_global_local_no_version.md new file mode 100644 index 0000000000..bc137bf1f7 --- /dev/null +++ b/crates/vite_cli_snapshots/tests/cli_snapshots/fixtures/command_env_install_global_local_no_version/snapshots/command_env_install_global_local_no_version.md @@ -0,0 +1,19 @@ +# command_env_install_global_local_no_version + +## `vp install -g .` + +``` +VITE+ - The Unified Toolchain for the Web + +info: Installing 1 global package with Node.js +✓ Installed global-local-no-version (no version) + Bins: global-local-no-version +``` + +## `vp list -g global-local-no-version` + +``` +Package Node version Binaries +--- --- --- +global-local-no-version@unknown 24.18.0 global-local-no-version +``` diff --git a/crates/vite_global_cli/src/commands/global/install.rs b/crates/vite_global_cli/src/commands/global/install.rs index d2618c5314..3dcc139b26 100644 --- a/crates/vite_global_cli/src/commands/global/install.rs +++ b/crates/vite_global_cli/src/commands/global/install.rs @@ -38,7 +38,7 @@ struct Package<'a> { } struct InstalledPackage { - installed_version: String, + installed_version: Option, bin_names: Vec, js_bins: HashSet, install_id: String, @@ -393,10 +393,11 @@ pub async fn install( continue; } }; + let metadata_version = installed_version.as_deref().unwrap_or("unknown"); let mut metadata = PackageMetadata::new( package_name.clone(), - installed_version.clone(), + metadata_version.to_string(), node_version.clone(), None, bin_names.clone(), @@ -461,7 +462,7 @@ pub async fn install( BinConfig::new( bin_name.clone(), package_name.clone(), - installed_version.clone(), + metadata_version.to_string(), node_version.clone(), ) .save() @@ -504,7 +505,7 @@ pub async fn install( operation_past, package_name.bold(), if update { "to " } else { "" }, - installed_version.bold() + installed_version.as_deref().unwrap_or("(no version)").bold() )); if !bin_names.is_empty() { let bins = bin_names @@ -589,7 +590,7 @@ async fn install_one( } }; - let installed_version = package_json["version"].as_str().unwrap_or("unknown").to_string(); + let installed_version = package_json["version"].as_str().map(ToString::to_string); let binary_infos = extract_binaries(&package_json); let mut bin_names = Vec::new();