From 76b34bc72269182741c2304ddd3ff70e9c43e6ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B5=B7=E5=AF=8C?= Date: Sat, 31 Jan 2026 19:07:51 +0800 Subject: [PATCH] feat: add CLI script for cfspider-browser npm package --- .gitignore | 3 + cfspider-browser/bin/cli.js | 131 ++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 cfspider-browser/bin/cli.js diff --git a/.gitignore b/.gitignore index e05128c..1c27348 100644 --- a/.gitignore +++ b/.gitignore @@ -89,5 +89,8 @@ cfspider-browser/release/ cfspider-browser/.vscode/ cfspider-browser/*.log +# 允许 cfspider-browser 的 CLI 脚本 +!cfspider-browser/bin/cli.js + # Cursor 工作区 .cursor/ diff --git a/cfspider-browser/bin/cli.js b/cfspider-browser/bin/cli.js new file mode 100644 index 0000000..3a79482 --- /dev/null +++ b/cfspider-browser/bin/cli.js @@ -0,0 +1,131 @@ +#!/usr/bin/env node + +/** + * CFspider Browser CLI + * + * 用法: + * npx cfspider-browser # 启动开发服务器 + * npx cfspider-browser build # 构建生产版本 + * npx cfspider-browser --help # 显示帮助 + */ + +const { spawn, execSync } = require('child_process'); +const path = require('path'); +const fs = require('fs'); + +const args = process.argv.slice(2); +const command = args[0] || 'dev'; + +// 获取包的根目录 +const packageRoot = path.resolve(__dirname, '..'); + +// 检查是否在正确的目录 +const packageJsonPath = path.join(packageRoot, 'package.json'); +if (!fs.existsSync(packageJsonPath)) { + console.error('Error: package.json not found'); + process.exit(1); +} + +// 帮助信息 +function showHelp() { + console.log(` +CFspider Browser - AI驱动的智能浏览器 + +用法: + npx cfspider-browser [command] + +命令: + dev 启动开发服务器 (默认) + build 构建 Electron 应用 + install 安装依赖 + help 显示帮助信息 + +示例: + npx cfspider-browser # 启动开发模式 + npx cfspider-browser build # 构建应用 + +更多信息: https://www.cfspider.com +`); +} + +// 运行 npm 脚本 +function runNpmScript(script) { + console.log(`\n🚀 CFspider Browser - Running: npm run ${script}\n`); + + const isWindows = process.platform === 'win32'; + const npmCmd = isWindows ? 'npm.cmd' : 'npm'; + + const child = spawn(npmCmd, ['run', script], { + cwd: packageRoot, + stdio: 'inherit', + shell: true + }); + + child.on('error', (err) => { + console.error('Failed to start:', err.message); + process.exit(1); + }); + + child.on('close', (code) => { + process.exit(code || 0); + }); +} + +// 安装依赖 +function installDeps() { + console.log('\n📦 Installing dependencies...\n'); + + const isWindows = process.platform === 'win32'; + const npmCmd = isWindows ? 'npm.cmd' : 'npm'; + + try { + execSync(`${npmCmd} install`, { + cwd: packageRoot, + stdio: 'inherit' + }); + console.log('\n✅ Dependencies installed successfully!\n'); + console.log('Run: npx cfspider-browser dev'); + } catch (err) { + console.error('Failed to install dependencies'); + process.exit(1); + } +} + +// 主逻辑 +switch (command) { + case 'dev': + case 'start': + runNpmScript('electron:dev'); + break; + + case 'build': + runNpmScript('electron:build'); + break; + + case 'build-win': + runNpmScript('electron:build-win'); + break; + + case 'build-mac': + runNpmScript('electron:build-mac'); + break; + + case 'build-linux': + runNpmScript('electron:build-linux'); + break; + + case 'install': + installDeps(); + break; + + case 'help': + case '--help': + case '-h': + showHelp(); + break; + + default: + console.error(`Unknown command: ${command}`); + showHelp(); + process.exit(1); +}