/** * 框架 → 默认构建命令映射(hosting 本地构建 / app 云端构建复用) */ export declare const FRAMEWORK_BUILD_COMMANDS: Record; /** * 框架 → 默认构建产物目录映射(与 FRAMEWORK_BUILD_COMMANDS 一一对应) * * 注意不能全部默认 dist: * - CRA(react-scripts build)实际输出 build/ * - next/nuxt 输出 .next/.nuxt * - vite/vue 输出 dist * - angular 默认 outputPath 为 dist/<项目名>,产物在子目录而非 dist/ 根目录(见 resolveAngularOutputDir), * 此处 'dist' 仅作 angular.json 推导失败时的回退值 * 构建场景 outputDir 未显式配置时必须按此映射取产物目录,否则上传路径与构建产物不一致导致部署失败 * (或上传到陈旧的 dist 目录)。 */ export declare const FRAMEWORK_OUTPUT_DIRS: Record; export interface IFrameworkConfig { framework?: string; buildCommand?: string; } /** hosting 构建产物目录解析配置 */ export interface IHostingOutputConfig extends IFrameworkConfig { outputDir?: string; } /** 读取 package.json 的函数签名(测试可注入 mock,Node 20+ 下 fs 属性为只读 getter 不便 spy) */ export type ReadPkgFile = (filePath: string, encoding: 'utf8') => string; /** * 探测项目根目录下的框架类型(读 package.json 依赖) * 读取失败或无匹配返回 null(按纯静态处理) */ export declare function detectFramework(root: string, readPkgFile?: ReadPkgFile): string | null; /** * 解析构建命令,优先级: * 1. 显式配置 buildCommand(含空字符串,'' = 不构建) * 2. 显式配置 framework → 映射推导(static/custom → null 不构建) * 3. 未配置 framework → 读 package.json 自动探测框架并推导 * 均无法确定 → null(纯静态直接上传) */ export declare function resolveBuildCommand(config: IFrameworkConfig, root: string, readPkgFile?: ReadPkgFile): string | null; /** * 解析默认产物目录(有构建场景),优先级: * 1. 显式配置 outputDir → 直接返回(调用方负责 path.resolve) * 2. 显式 framework → FRAMEWORK_OUTPUT_DIRS 映射(react → build,vite/vue → dist,next → .next; * angular 默认 outputPath 为 dist/<项目名>,从 angular.json 推导真实产物目录) * 3. package.json 自动探测框架 → 映射推导 * 均无法确定(纯静态)→ null,由调用方回退到 root * * 与 resolveBuildCommand 共用同一份「框架探测/推导」逻辑,保证「构建产物目录」与「构建命令」来自同一次探测, * 避免 CRA 场景探测到 react-scripts build(产物在 build/)却默认上传 dist 导致路径不存在。 */ export declare function resolveOutputDir(config: IHostingOutputConfig, root: string, readPkgFile?: ReadPkgFile): string | null; /** * 统一解析 hosting 上传目录(绝对路径),与 StaticDeployer.deployHosting 保持严格一致。 * * 规则: * 1) 有构建命令时: * - 显式 buildCommand(自定义构建):outputDir 未配置回退 root/dist * - 推导 buildCommand(framework / package.json):按 resolveOutputDir 框架映射,未命中回退 dist * 2) 无构建命令时: * - outputDir 未配置回退 root(纯静态直传) */ export declare function resolveHostingOutputDir(config: IHostingOutputConfig, root: string, readPkgFile?: ReadPkgFile): string; /** * 本地构建单个 hosting 项(仅执行 buildCommand,不安装依赖,不上传) * * 从 StaticDeployer.runLocalBuild 提炼的纯函数版:不依赖 Environment, * 供 CLI 的 tcb app build 与任何需要「只构建不上传」的调用方复用, * 避免各端各自复制推断/执行逻辑。buildCommand 为空 → 直接返回 null。 * * @param config hosting 项配置(framework/buildCommand/outputDir,root 单独传参) * @param root 项目目录(绝对路径) * @returns 构建产物目录(resolveHostingOutputDir 结果);无可构建命令返回 null * @throws 构建失败时(含 stderr 摘要) */ export declare function buildHostingItem(config: IHostingOutputConfig, root: string, envVariables?: Record): string | null;