引入
import {
RsyncDeployOptions,
RsyncDeployResult,
resolveHost,
buildRsyncArgs,
checkSshConnection,
warnIfStale,
deployRsync
} from 't-comm';
// 不支持 tree-shaking 的项目
import {
RsyncDeployOptions,
RsyncDeployResult,
resolveHost,
buildRsyncArgs,
checkSshConnection,
warnIfStale,
deployRsync
} from 't-comm/lib/rsync-deploy/index';
// 只支持 ESM 的项目
import {
RsyncDeployOptions,
RsyncDeployResult,
resolveHost,
buildRsyncArgs,
checkSshConnection,
warnIfStale,
deployRsync
} from 't-comm/es/rsync-deploy/index';RsyncDeployOptions
描述:rsync 免密部署配置选项
参数:
RsyncDeployOptions.directory:string.host:string.target:string.port:string|number.delete:boolean.dryRun:boolean.skipConfirm:boolean.confirmFn:function.isTTY:boolean
rsyncDeployOptions.directory : string
本地产物目录,默认 './dist'
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.host : string
ssh 目标:~/.ssh/config 别名(如 loginPersonalNew)、root@1.2.3.4 或纯 IP。 不传则从环境变量 DEPLOY_HOST 读取。
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.target : string
服务器目标目录,必须以 / 结尾(rsync 语义敏感)。 不传则从环境变量 DEPLOY_PATH 读取。
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.port : string | number
ssh 端口。用 ssh 别名时由 ssh config 决定,无需传。不传则从环境变量 DEPLOY_PORT 读取。
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.delete : boolean
是否 --delete 清理服务器多余文件,默认 true
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.dryRun : boolean
仅预览(--dry-run --verbose),不实际传输,默认 false
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.skipConfirm : boolean
跳过二次确认(CI / 非交互场景),默认 false
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.confirmFn : function
部署前确认函数,默认 readline 提问(非 tty 自动跳过)
Kind: instance property of RsyncDeployOptions
Optional:
rsyncDeployOptions.isTTY : boolean
是否交互终端,默认取 process.stdin.isTTY
Kind: instance property of RsyncDeployOptions
Optional:
RsyncDeployResult
描述:rsync 部署结果
参数:
rsyncDeployResult.success : boolean
是否成功
Kind: instance property of RsyncDeployResult
rsyncDeployResult.host : string
部署目标主机
Kind: instance property of RsyncDeployResult
rsyncDeployResult.target : string
服务器目标目录
Kind: instance property of RsyncDeployResult
rsyncDeployResult.command : string
实际执行的 rsync 命令(参数数组 join)
Kind: instance property of RsyncDeployResult
rsyncDeployResult.dryRun : boolean
是否为 dry-run
Kind: instance property of RsyncDeployResult
rsyncDeployResult.delete : boolean
是否带 --delete
Kind: instance property of RsyncDeployResult
rsyncDeployResult.cancelled : boolean
用户取消(部署前二次确认被拒绝)
Kind: instance property of RsyncDeployResult
Optional:
rsyncDeployResult.error : string
错误信息(失败时)
Kind: instance property of RsyncDeployResult
Optional:
resolveHost()
描述:解析 ssh 目标 兼容三种形态:
- ssh config 别名(loginPersonalNew):原样使用,User/Port 由 ssh config 决定
- root@1.2.3.4:已带用户名,原样使用
- 纯 IP(1.2.3.4):补默认用户 root@
参数:
buildRsyncArgs()
描述:构造 rsync 参数数组
参数:
checkSshConnection()
描述:校验 SSH 免密是否可用 BatchMode=yes:禁止任何交互式提示。若免密没配好, ssh 会立即失败而不是卡在密码输入等待(非交互场景会一直挂着)。
参数:
warnIfStale()
描述:提示产物新鲜度 常见事故:改了代码但忘了 build,直接 deploy 把旧产物推上去。 这里打印 index.html 的修改时间,超过 1 小时给出提醒。
参数:
deployRsync()
描述:rsync 免密部署:将本地目录增量同步到服务器 与 t-comm 旧 publish(expect + scp,需密码、不清理旧产物)不同, 本方案基于 SSH 免密 + rsync:
- 默认 --delete,让服务器目录与本地完全一致,清掉带 hash 的历史产物
- BatchMode=yes 校验免密,未配置时立即失败而非挂起
- 空目录 / 目标路径不以 / 结尾等高风险场景前置拦截
- 非 tty(CI / 管道)自动跳过二次确认
参数:
示例
import { deployRsync } from 't-comm';
const result = await deployRsync({
directory: './dist',
host: 'loginPersonalNew', // 或 'root@1.2.3.4'
target: '/var/www/my-app/', // 必须以 / 结尾
});