Agent Skillsvoidzero-dev/vite-plus › spawn-process

spawn-process

GitHub

指导在 Rust 中通过 vite_command crate 执行子进程。提供 resolve_bin、build_command、run_command 等 API,禁止直接使用 std 或 tokio 命令,确保跨平台兼容性和标准 I/O 正确处理。

.claude/skills/spawn-process/SKILL.md voidzero-dev/vite-plus

Trigger Scenarios

需要启动外部程序 Rust 项目中涉及子进程执行 询问如何解析二进制路径

Install

npx skills add voidzero-dev/vite-plus --skill spawn-process -g -y
More Options

Non-standard path

npx skills add https://github.com/voidzero-dev/vite-plus/tree/main/.claude/skills/spawn-process -g -y

Use without installing

npx skills use voidzero-dev/vite-plus@spawn-process

指定 Agent (Claude Code)

npx skills add voidzero-dev/vite-plus --skill spawn-process -a claude-code -g -y

安装 repo 全部 skill

npx skills add voidzero-dev/vite-plus --all -g -y

预览 repo 内 skill

npx skills add voidzero-dev/vite-plus --list

SKILL.md

Frontmatter
{
    "name": "spawn-process",
    "description": "Guide for writing subprocess execution code using the vite_command crate",
    "allowed-tools": "Read, Grep, Glob, Edit, Write, Bash"
}

Add Subprocess Execution Code

When writing Rust code that needs to spawn subprocesses (resolve binaries, build commands, execute programs), always use the vite_command crate. Never use which, tokio::process::Command::new, or std::process::Command::new directly.

Available APIs

vite_command::resolve_bin(name, path_env, cwd) — Resolve a binary name to an absolute path

Handles PATHEXT (.cmd/.bat) on Windows. Pass None for path_env to search the current process PATH.

// Resolve using current PATH
let bin = vite_command::resolve_bin("node", None, &cwd)?;

// Resolve using a custom PATH
let custom_path = std::ffi::OsString::from(&path_env_str);
let bin = vite_command::resolve_bin("eslint", Some(&custom_path), &cwd)?;

vite_command::build_command(bin_path, cwd) — Build a command for a pre-resolved binary

Returns tokio::process::Command with cwd, inherited stdio, and fix_stdio_streams on Unix already configured. Add args, envs, or override stdio as needed.

let bin = vite_command::resolve_bin("eslint", None, &cwd)?;
let mut cmd = vite_command::build_command(&bin, &cwd);
cmd.args(&[".", "--fix"]);
cmd.env("NODE_ENV", "production");
let mut child = cmd.spawn()?;
let status = child.wait().await?;

vite_command::build_shell_command(shell_cmd, cwd) — Build a shell command

Uses /bin/sh -c on Unix, cmd.exe /C on Windows. Same stdio and fix_stdio_streams setup as build_command.

let mut cmd = vite_command::build_shell_command("echo hello && ls", &cwd);
let mut child = cmd.spawn()?;
let status = child.wait().await?;

vite_command::run_command(bin_name, args, envs, cwd) — Resolve + build + run in one call

Combines resolve_bin, build_command, and status().await. The envs HashMap must include "PATH" if you want custom PATH resolution.

let envs = HashMap::from([("PATH".to_string(), path_value)]);
let status = vite_command::run_command("node", &["--version"], &envs, &cwd).await?;

Dependency Setup

Add vite_command to the crate's Cargo.toml:

[dependencies]
vite_command = { workspace = true }

Do NOT add which as a direct dependency — binary resolution goes through vite_command::resolve_bin.

Exception

crates/vite_global_cli/src/shim/exec.rs uses synchronous std::process::Command with Unix exec() for process replacement. This is the only place that bypasses vite_command.

Version History

  • a24eede Current 2026-07-24 11:29

Same Skill Collection

.claude/skills/add-ecosystem-ci/SKILL.md
.claude/skills/bump-vite-task/SKILL.md
.claude/skills/release-manager/SKILL.md
.claude/skills/sync-tsdown-cli/SKILL.md
.claude/skills/test-pkg-pr-new-migrate/SKILL.md
.claude/skills/verify-interactive-cli/SKILL.md

Metadata

Files
0
Version
40a6273
Hash
5e52f5c1
Indexed
2026-07-24 11:29

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-07 16:31
浙ICP备14020137号-1 $Carte des visiteurs$