/** * detect-project.ts — 项目自动检测工具 * * 从给定的工作目录(或向上查找)自动发现 vext 项目结构: * - 项目根目录(package.json 所在位置) * - 源码目录(rootDir/src) * - 项目语言(TypeScript / JavaScript,由 tsconfig.json 存在性判断) * - 框架启动入口文件(vextjs 内部 bootstrap 文件路径) * * Fail Fast 检测: * - 找不到 package.json → 抛出错误 * - src/ 目录不存在 → 抛出错误 * - src/config/ 目录不存在 → 抛出错误 * - src/config/default.{ts|js} 不存在 → 抛出错误 * * @module cli/utils/detect-project * @see 09-cli.md §4(项目检测工具) * @see IMPLEMENTATION-PLAN.md 任务 1.18 */ /** * 项目检测结果 */ export interface ProjectInfo { /** 项目根目录(package.json 所在位置的绝对路径) */ rootDir: string; /** 源码目录(rootDir/src 的绝对路径) */ srcDir: string; /** 项目语言(由 tsconfig.json 存在性推断) */ language: "ts" | "js"; /** * 框架启动入口文件路径 * * 始终指向 vextjs 框架内部的 bootstrap 文件: * node_modules/vextjs/dist/lib/bootstrap.js * * CLI 的 vext start 会 fork 此文件作为子进程入口。 */ entryFile: string; } /** * 有效构建产物检查结果。 */ export interface DistBuildInspection { valid: boolean; hasDistDir: boolean; missing: string[]; } /** * detectProject — 自动发现项目结构 * * 从指定目录开始,向上查找 package.json 确定项目根目录, * 然后检测 src/ 目录、tsconfig.json、src/config/default 文件。 * * @param cwd 起始目录(通常是 process.cwd()) * @returns 项目信息 * @throws 找不到 package.json / src / config / default 配置文件时抛出描述性错误 */ export declare function detectProject(cwd: string): ProjectInfo; /** * findProjectRoot — 从 cwd 向上查找 package.json 所在目录 * * 沿目录树向上逐层查找,直到找到包含 package.json 的目录。 * 到达文件系统根目录仍未找到时抛出错误。 * * @param cwd 起始目录 * @returns 项目根目录的绝对路径 * @throws 找不到 package.json 时抛出描述性错误 */ export declare function findProjectRoot(cwd: string): string; /** * inspectDistBuild — 检测 dist/ 编译产物是否可用于 vext start * * TypeScript 项目不能只凭 dist/ 目录存在就进入生产启动路径; * 至少要有 config/default.js 与 dist/package.json 才能保证配置入口和 * CJS 子目录解析规则已由 vext build 写入。 * * @param rootDir 项目根目录 * @returns dist 构建产物检查结果 */ export declare function inspectDistBuild(rootDir: string): DistBuildInspection; /** * hasDistBuild — 检测是否存在有效 dist/ 编译产物 * * @param rootDir 项目根目录 * @returns 是否存在有效 dist/ 构建产物 */ export declare function hasDistBuild(rootDir: string): boolean; /** * resolveEntryFile — 解析实际的入口文件路径 * * 入口文件始终指向框架内部的 bootstrap.js(node_modules/vextjs/dist/lib/bootstrap.js)。 * 用户项目的 dist/ 目录只包含用户业务代码的编译产物,不包含框架 bootstrap。 * * dist/ 的存在与否通过 VEXT_BUILT 环境变量告知 bootstrap, * bootstrap 据此决定从 dist/ 还是 src/ 加载用户代码。 * * @param project 项目检测结果 * @returns 实际的入口文件绝对路径(始终为框架内部 bootstrap) */ export declare function resolveEntryFile(project: ProjectInfo): string;