1. 安装@clack/prompts
npm i @clack/prompts -D
2.创建一个/scripts/start.js
import { select, cancel, isCancel } from '@clack/prompts';
import { exec, spawn } from 'child_process';
import { promisify } from 'util';
const execAsync = promisify(exec);
async function main() {
const mode = await select({
message: '请选择运行环境:',
options: [
{ label: '测试环境 (development)', value: 'test' },
{ label: '生产环境 (production)', value: 'prod' }
]
});
if (isCancel(mode)) {
cancel('操作已取消');
process.exit(0);
}
// 动态生成命令
const command = {
test: 'vite --mode development',
prod: 'vite --mode production',
}[mode]
// 安全执行(防命令注入)
const child = spawn(command.split(' ')[0], command.split(' ').slice(1), {
stdio: 'inherit', // 继承父进程输出流
shell: true // 兼容 Windows
})
child.on('exit', (code) => {
console.log(` 子进程退出,代码:${code}`)
})
}
main();
3. 修改package.json
"scripts": {
"dev": "node scripts/start.js",
"dev:test": "vite --mode development",
"dev:prod": "vite --mode production",
"build": "vite build",
"build:stage": "vite build --mode staging",
"preview": "vite preview"
}
4.执行npm run dev