diff --git a/.changes/improve-cli-init.md b/.changes/improve-cli-init.md new file mode 100644 index 000000000..ab9278d61 --- /dev/null +++ b/.changes/improve-cli-init.md @@ -0,0 +1,6 @@ +--- +"tauri-cli": patch:enhance +"@tauri-apps/cli": patch:enhance +--- + +Improve the `init` command behavior by detecting the project NPM package manager. diff --git a/tooling/cli/src/helpers/npm.rs b/tooling/cli/src/helpers/npm.rs index 916c0ae9b..c099783a6 100644 --- a/tooling/cli/src/helpers/npm.rs +++ b/tooling/cli/src/helpers/npm.rs @@ -37,6 +37,7 @@ impl PackageManager { let mut use_npm = false; let mut use_pnpm = false; let mut use_yarn = false; + let mut use_bun = false; if let Ok(entries) = std::fs::read_dir(path) { for entry in entries.flatten() { @@ -48,11 +49,13 @@ impl PackageManager { use_pnpm = true; } else if name.as_ref() == "yarn.lock" { use_yarn = true; + } else if name.as_ref() == "bun.lockb" { + use_bun = true; } } } - if !use_npm && !use_pnpm && !use_yarn { + if !use_npm && !use_pnpm && !use_yarn && !use_bun { return Vec::new(); } @@ -67,6 +70,9 @@ impl PackageManager { if use_yarn { found.push(PackageManager::Yarn); } + if use_bun { + found.push(PackageManager::Bun); + } found } diff --git a/tooling/cli/src/init.rs b/tooling/cli/src/init.rs index fc382c091..4ae197757 100644 --- a/tooling/cli/src/init.rs +++ b/tooling/cli/src/init.rs @@ -5,6 +5,7 @@ use crate::{ helpers::{ framework::{infer_from_package_json as infer_framework, Framework}, + npm::PackageManager, prompts, resolve_tauri_path, template, }, VersionMetadata, @@ -130,13 +131,18 @@ impl Options { ) })?; + let detected_package_manager = match PackageManager::from_project(&self.directory).first() { + Some(&package_manager) => package_manager, + None => PackageManager::Npm, + }; + self.before_dev_command = self .before_dev_command .map(|s| Ok(Some(s))) .unwrap_or_else(|| { prompts::input( "What is your frontend dev command?", - Some("npm run dev".to_string()), + Some(default_dev_command(detected_package_manager).into()), self.ci, true, ) @@ -148,7 +154,7 @@ impl Options { .unwrap_or_else(|| { prompts::input( "What is your frontend build command?", - Some("npm run build".to_string()), + Some(default_build_command(detected_package_manager).into()), self.ci, true, ) @@ -158,6 +164,26 @@ impl Options { } } +fn default_dev_command(pm: PackageManager) -> &'static str { + match pm { + PackageManager::Yarn => "yarn dev", + PackageManager::YarnBerry => "yarn dev", + PackageManager::Npm => "npm run dev", + PackageManager::Pnpm => "pnpm dev", + PackageManager::Bun => "bun dev", + } +} + +fn default_build_command(pm: PackageManager) -> &'static str { + match pm { + PackageManager::Yarn => "yarn build", + PackageManager::YarnBerry => "yarn build", + PackageManager::Npm => "npm run build", + PackageManager::Pnpm => "pnpm build", + PackageManager::Bun => "bun build", + } +} + pub fn command(mut options: Options) -> Result<()> { options = options.load()?;