/** * cli/dev.ts — vext dev 命令实现 * * 启动开发模式服务器,集成: * - ColdRestarter:子进程管理(fork / kill / restart) * - FileWatcher:文件变更监听(fs.watch / polling) * - change-classifier:变更分类(cold / soft / ignore) * - Soft Reload(Tier 1/2):通过 IPC 通知子进程执行热重载 * - Cold Restart(Tier 3):配置/插件变更时完整重启子进程 * - 键盘交互:r=restart, h=reload, c=clear, Ctrl+C=quit * * 三层重载策略: * * | Tier | 触发条件 | 动作 | * |------|-----------------------|---------------------------------------| * | T1 | 代码修改(modify) | IPC → 子进程 soft reload(transform) | * | T2 | 文件新增/删除 | IPC → 子进程 soft reload(rebuild) | * | T3 | 配置/插件/.env 变更 | Cold Restart(kill + fork) | * * 降级策略: * - `--no-hot` 选项:所有变更都走 Cold Restart * - 子进程 `request-cold-restart`:级联爆炸时自动降级 * - Soft Reload 失败:旧 handler 通过闭包继续服务,等待用户修复 * * 进程架构: * vext dev (主进程) * ├─ FileWatcher(监听 src/ + 根配置文件) * ├─ ColdRestarter(管理子进程生命周期) * └─ stdin(键盘交互) * │ * ▼ fork() * Worker 子进程(dev-entry.js → devBootstrap) * ├─ DevCompiler(esbuild 预编译) * ├─ HotSwappableHandler(原子替换 handler) * ├─ SoftReloader(编排 Soft Reload 流程) * ├─ HTTP Server(socket 保持不变) * └─ 框架实例(app + services + routes) * * @module cli/dev * @see 11d-bootstrap-cli.md §5(CLI 集成) * @see 11-hot-reload.md §2(三层重载架构) * @see 09-cli.md §2(vext dev 开发模式) * @see IMPLEMENTATION-PLAN.md 任务 2.4 / 2.8 */ /** * vext dev 命令选项 */ export interface DevCommandOptions { /** 项目根目录(默认: cwd) */ root?: string; /** 覆盖监听端口(通过 VEXT_PORT 环境变量传递给子进程) */ port?: number; /** 覆盖监听地址(通过 VEXT_HOST 环境变量传递给子进程) */ host?: string; /** 强制使用 polling 模式(适用于 Docker / 网络文件系统) */ poll?: boolean; /** Polling 间隔毫秒数(默认: 1000) */ pollInterval?: number; /** 防抖间隔毫秒数(默认: 100) */ debounce?: number; /** * 禁用 soft reload,所有变更都走 cold restart * * 当设置为 true 时,即使 change-classifier 判定为 soft 的变更 * 也会走 Cold Restart 路径。适用于调试 Soft Reload 问题时。 */ noHot?: boolean; /** 每次 reload 后清空控制台 */ clear?: boolean; /** 生命周期日志增强 */ verboseLifecycle?: boolean; /** 端口冲突策略 */ portConflict?: "error" | "prompt" | "kill" | "next"; /** 让 TypeScript 诊断重新阻塞启动 / reload */ strictPreflight?: boolean; /** 输出启动阶段耗时 */ startupProfile?: boolean; /** 将启动阶段耗时写入 JSON 文件 */ startupProfileJson?: string; } /** * devCommand — vext dev CLI 命令入口 * * 解析命令行参数,启动 ColdRestarter + FileWatcher, * 监听文件变更并触发 Cold Restart。 * * @param args 命令行参数(如 ['--poll', '--debounce', '200']) */ export declare function devCommand(args?: string[]): Promise;