UNPKG

mixone

Version:

A cross-platform desktop application framework that enables development using JavaScript, HTML5, Electron API and Node.js. Build Windows, macOS and Linux apps with Vue/React and system APIs - that's why we call it mixone.A powerful Electron development in

137 lines (130 loc) 5.18 kB
#!/usr/bin/env node const path = require('path'); const fs = require('fs'); const { spawn } = require('child_process'); // 获取工作目录 const cwd = process.cwd(); // 获取命令行参数 const [command, ...args] = process.argv.slice(2); // 新增:支持多种版本号命令 const VERSION_COMMANDS = ['-v', '-V', '-version', 'version']; if (VERSION_COMMANDS.includes(command)) { // 读取 package.json 并输出 version const pkgPath = path.join(__dirname, 'package.json'); try { const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')); console.log(pkg.version); } catch (e) { console.error('无法读取版本号:', e.message); process.exit(1); } process.exit(0); } // 支持的命令列表 const VALID_COMMANDS = ['create', 'compile', 'dev', 'serve', 'package', 'preview', 'build']; // 检查命令是否有效 if (!command || !VALID_COMMANDS.includes(command)) { console.log('请使用以下命令:'); console.log(' mixone create 创建项目'); console.log(' mixone compile 编译项目'); console.log(' mixone dev 启动开发模式'); console.log(' mixone serve 启动服务'); console.log(' mixone preview 预览应用'); console.log(' mixone package 打包应用'); console.log(' mixone build 构建项目'); console.log(' mixone -v 查看版本号'); process.exit(1); } // 构建命令文件路径 const commandFile = path.join(__dirname, `${command}.js`); const byteCodeCli = path.join(__dirname,'node_modules','bytenode','lib','cli.js'); // 定义一个函数来使用 spawn 执行 serve.js function runServeScript(cwd, args) { console.log(cwd); const serveProcess = spawn('node', [byteCodeCli,'serve.jsc', '--electron'], { stdio: 'inherit', cwd:path.join(cwd,'out') }); serveProcess.on('close', (code) => { if (code !== 0) { console.error(`serve.js 进程退出,退出码: ${code}`); process.exit(code); } }); } // 执行对应的命令 try { if (command === 'dev') { // 使用 spawn 调用 node 执行 compile.js const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'compile.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`compile.js 进程退出,退出码: ${code}`); process.exit(code); } else { console.log('------------------------'); // 调用独立的函数来执行 serve.js runServeScript(cwd, args); } }); } else if(command == 'compile') { // 使用 spawn 调用 node 执行 compile.js const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'compile.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`compile.js 进程退出,退出码: ${code}`); process.exit(code); } else { console.log('编译完成'); } }); } else if(command == 'serve') { runServeScript(cwd, args); } else if(command == 'preview') { const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'preview.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`preview.js 进程退出,退出码: ${code}`); process.exit(code); } }); } else if(command == 'package') { const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'package.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`package.js 进程退出,退出码: ${code}`); process.exit(code); } }); } else if(command == 'build') { const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'build.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`build.js 进程退出,退出码: ${code}`); process.exit(code); } }); } else if(command == 'create'){ // 获取项目名称(第一个参数) const projectName = args[0] + path.sep + 'out' || 'electron-app' + path.sep + 'out'; // 构建项目路径 const projectPath = path.join(cwd, projectName); // 使用 spawn 调用 node 执行 compile.js const compileProcess = spawn('node', [byteCodeCli, path.join(__dirname, 'project.jsc'), ...args], { stdio: 'inherit' }); compileProcess.on('close', (code) => { if (code !== 0) { console.error(`project.js 进程退出,退出码: ${code}`); process.exit(code); } else { console.log('------------------------'); } }); } else { // 检查命令文件是否存在 if (!fs.existsSync(commandFile)) { console.error(`错误: 命令 "${command}" 对应的文件不存在`); process.exit(1); } require(commandFile); } } catch (err) { console.error(`执行命令 "${command}" 时出错:`, err); process.exit(1); }