Skip to content

引入

ts
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

本地产物目录,默认 './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 / 管道)自动跳过二次确认

参数

示例

ts
import { deployRsync } from 't-comm';

const result = await deployRsync({
  directory: './dist',
  host: 'loginPersonalNew',      // 或 'root@1.2.3.4'
  target: '/var/www/my-app/',    // 必须以 / 结尾
});