UNPKG

@gulibs/vgrove-core

Version:

VGrove CLI - A unified development tool for React applications with auto-routes and i18n

80 lines (79 loc) 2.43 kB
#!/usr/bin/env node import { program } from 'commander'; import chalk from 'chalk'; import { loadConfig } from '../config/index.js'; import { startDevServer } from '../core/dev-server.js'; import { buildProject } from '../core/build.js'; // 设置 CLI 程序 program .name('vgrove') .description('VGrove CLI - A unified development tool for React applications') .version('0.0.1'); // dev 命令 program .command('dev') .description('Start development server') .option('-p, --port <port>', 'Port to run the dev server on') .option('-o, --open', 'Open browser on server start') .action(async (options) => { try { const config = await loadConfig(); // 覆盖端口配置 if (options.port) { config.vite.server = { ...config.vite.server, port: parseInt(options.port, 10) }; } // 覆盖自动打开浏览器配置 if (options.open) { config.vite.server = { ...config.vite.server, open: true }; } await startDevServer(config); } catch (error) { console.error(chalk.red('Failed to start dev server:'), error); process.exit(1); } }); // build 命令 program .command('build') .description('Build for production') .option('--outDir <dir>', 'Output directory') .option('--sourcemap', 'Generate sourcemap') .option('--no-minify', 'Disable minification') .action(async (options) => { try { const config = await loadConfig(); // 覆盖构建配置 if (options.outDir) { config.vgrove.build.outDir = options.outDir; } if (options.sourcemap !== undefined) { config.vgrove.build.sourcemap = options.sourcemap; } if (options.minify === false) { config.vgrove.build.minify = false; } await buildProject(config); } catch (error) { console.error(chalk.red('Build failed:'), error); process.exit(1); } }); // 处理未捕获的异常 process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); process.exit(1); }); process.on('uncaughtException', (error) => { console.error('Uncaught Exception:', error); process.exit(1); }); // 解析命令行参数 program.parse();