一键打包本地文件并通过 SSH 部署到远程服务器
前端项目部署到服务器通常需要:npm run build → 手动打包 → 连接服务器 → 上传 → 解压。整个过程繁琐且容易出错。
ssh-fast-deploy 把这一切变成一行命令——打包、上传、远程解压,一步到位。
前提:远程服务器需安装 unzip 命令(CentOS/Ubuntu 默认都有)。
npm install ssh-fast-deploy -D或全局安装:
npm install ssh-fast-deploy -gnpx sfp init会生成 .deployrc.json(支持 // 行注释):
{
// 使用 SSH 密码认证
"host": "110.42.xxx.xxx",
"username": "root",
"password": "your-password",
"remotePath": "/www/wwwroot/my-site",
"localDir": "dist"
}npx sfp搞定。
# 使用配置文件 + 覆盖参数
sfp --local-dir dist,public
# 完全通过命令行
sfp \
--host 192.168.1.100 \
--user root \
--pass yourpass \
--remote-path /www/wwwroot/my-site \
--local-dir dist
# 生成配置模板
sfp initimport { deploy } from 'ssh-fast-deploy';
// 方式1:使用项目中的配置文件
await deploy();
// 方式2:完全通过代码传参
await deploy({
host: '192.168.1.100',
port: 22,
username: 'root',
password: 'your-password',
remotePath: '/www/wwwroot/my-site',
localDir: ['dist', 'public'], // 支持多目录
silent: false, // 静默模式
});
// 方式3:SSH 密钥认证
await deploy({
host: '192.168.1.100',
username: 'root',
privateKey: '~/.ssh/id_rsa',
remotePath: '/www/wwwroot/my-site',
});import { packFiles, uploadAndExtract } from 'ssh-fast-deploy';
// 先打包
const zipPath = await packFiles(['dist'], '.upload.zip');
// 再上传
await uploadAndExtract(
{ host: '...', username: 'root', password: '...' },
zipPath,
'/www/wwwroot/my-site',
);CLI 参数 > .deployrc.json > package.json#deploy > 环境变量 > 默认值
| 方式 | 字段 | 说明 |
|---|---|---|
| CLI | --host, --user, --pass, --key 等 |
sfp --host xxx |
| .deployrc.json | 全字段 | 项目根目录的 JSON 配置 |
| package.json | "deploy": {...} |
嵌入在 package.json 中 |
| 环境变量 | SSH_HOST, SSH_USER 等 |
CI/CD 友好 |
{
"name": "my-project",
"scripts": {
"deploy": "sfp"
},
"deploy": {
"host": "110.42.xxx.xxx",
"username": "root",
"privateKey": "~/.ssh/id_rsa",
"remotePath": "/www/wwwroot/my-site",
"localDir": "dist"
}
}然后直接 npm run deploy。
ssh-fast-deploy/
├── bin/
│ └── cli.js # CLI 入口
├── src/
│ ├── index.js # API 入口,导出 deploy()
│ ├── deploy.js # 打包 + SSH 上传 + 远程解压
│ └── config.js # 多源配置加载
├── package.json
├── README.md
└── LICENSE
MIT

{ // ===== 必填 ===== "host": "your-server.com", // SSH 服务器 IP 或域名 "username": "root", // SSH 登录用户 "remotePath": "/www/wwwroot/your-site", // 远程部署目录 (绝对路径) // ===== 认证 (二选一) ===== "privateKey": "~/.ssh/id_rsa", // 推荐: SSH 私钥路径 // "password": "your-password", // 备选: SSH 密码 // ===== 可选 ===== "port": 22, // SSH 端口,默认 22 "localDir": "dist", // 本地要打包的目录,多目录: "dist,public" "backup": false // 部署前备份远程文件 (规划中) }