import { Environment } from '../environment'; /** app 声明式配置(cloudbaserc.json app 对象) */ export interface IAppDeployConfig { serviceName?: string; root?: string; framework?: string; installCommand?: string; buildCommand?: string; outputDir?: string; deployPath?: string; ignore?: string[]; envVariables?: Record; } /** hosting 声明式配置(cloudbaserc.json hosting[]) */ export interface IHostingDeployConfig { name?: string; root?: string; /** 框架类型:显式指定或未配置时读 root/package.json 自动检测;static/custom 表示纯静态(不构建) */ framework?: string; /** 安装命令,默认 npm install;空字符串跳过安装 */ installCommand?: string; /** 构建命令:非空则本地构建后上传;空字符串/未配置且无法检测 → 纯静态直接上传 outputDir */ buildCommand?: string; /** 构建产物目录:有构建时默认 dist,纯静态时默认 root */ outputDir?: string; /** 云端部署路径(决定访问 URL 与网关 PathRewrite.Prefix) */ deployPath?: string; ignore?: string[]; /** 构建时环境变量(注入本地构建进程,非敏感) */ envVariables?: Record; /** * 多页应用(MPA)入口文件列表,相对于产物目录,默认 ["index.html"]。 * 一致性上传时用于识别入口文件(内部映射为 uploadFiles 的 entryFiles)。 */ entryFile?: string[]; /** 发布后校验远端文件与本地产物一致(开启后走一致性上传) */ verify?: boolean; /** 发布前备份并在上传或校验失败时自动回滚(开启后走一致性上传) */ safe?: boolean; /** 发布成功后清理远端冗余文件(危险操作,开启后走一致性上传) */ prune?: boolean; } export interface IStaticDeployResult { name: string; url?: string; /** 是否写入了版本记录(app 写、hosting 不写) */ wroteRecord: boolean; } /** * app/hosting 声明式部署器 * * app:framework=static → 直传产物 + SkipBuild 写记录(对齐 tcb app deploy 纯静态分支); * 其余 framework → 云端构建(上传源码 → 云端构建 → 写版本记录),与现有 tcb app deploy 一致 * hosting:固定静态流程(buildCommand 非空则本地构建后直传),不写版本记录(现有 tcb hosting deploy 行为) */ export declare class StaticDeployer { private environment; constructor(environment: Environment); /** * app 部署(与现有 tcb app deploy 一致) * * framework=static:直传产物(hosting uploadFiles)+ createApp(SkipBuild) 后台写部署记录,跳过云端构建。 * 其余 framework:上传源码 ZIP → createApp 云端构建 → 写版本记录。 */ deployApp(options: { config: IAppDeployConfig; cwd?: string; }): Promise; /** * hosting 部署(固定静态流程,不写版本记录) * * 支持本地构建:buildCommand 非空时自动执行 build 后上传产物(依赖由用户自行安装, * 不代为执行 npm install); * 纯静态(buildCommand 空/未配置且无法检测框架)时直接上传 outputDir(默认 root,保持现状)。 * 访问地址 = https://{CdnDomain}{deployPath}(与 tcb hosting deploy 一致) */ deployHosting(options: { config: IHostingDeployConfig; cwd?: string; }): Promise; /** * app 纯静态直传(对齐 tcb app deploy 的 deployStaticApp 分支) * * 1. hosting uploadFiles 直传产物(文件级上传,立即可访问,无需打 ZIP) * 2. 后台异步 createApp(SkipBuild) 写部署记录(失败不影响文件访问) * 3. 跳过云端构建轮询,返回访问地址 */ private deployAppStatic; /** * app 云端构建:上传源码 ZIP → createApp 云端构建 → 写版本记录 */ private deployAppCloud; /** * 解析 hosting 访问地址:https://{CdnDomain}{deployPath} */ private resolveHostingUrl; /** * 本地构建(仅执行 buildCommand,不安装依赖) * * 只跑用户的构建命令,依赖由用户自行安装(对齐业界:Vercel/Netlify/Cloudflare * 均不在本地构建时代装依赖)。installCommand 不再被本地执行 —— CLI 侧通过 * installCommand: '' 已可跳过云端安装;本地一律不装。 * * - buildCommand:由调用方保证非空(hosting 经 resolveBuildCommand 判定;app local 由 if 判定) * - envVariables:注入构建进程环境变量(值统一转字符串) */ private runLocalBuild; /** * 解析 app 访问地址(describeAppInfo.Domain + appPath) */ private resolveAppUrl; }