# One Click Deploy

> 将本地静态网站或已构建前端项目发布到 Surge 或 Cloudflare Pages 的可移植部署 skill。

- Skill: `vibe-any/one-click-deploy` (Agent Skill, multi-file: 6 files)
- Install (CLI): `npx skillmds@latest add vibe-any/one-click-deploy`
- Raw SKILL.md: https://api.skillmd.com/api/skills/vibe-any/one-click-deploy/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: vibe-any (https://skillmd.com/u/vibe-any)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/vibe-any/one-click-deploy

---


# one-click-deploy

将本地静态网站或已经构建完成的前端项目发布到公网。Skill 不绑定特定 Agent、操作系统用户或安装目录；安装器应保留本目录结构，并把 `scripts/one-click-deploy.sh` 暴露为可执行命令，或在调用时传入安装后的 skill 根目录。

## 使用

安装器已将入口加入 `PATH` 时：

```bash
one-click-deploy ./dist
one-click-deploy ./dist --provider cf-pages --name my-site
```

未加入 `PATH` 时，使用安装器提供的实际路径替换 `<skill-dir>`：

```bash
bash <skill-dir>/scripts/one-click-deploy.sh ./dist
```

不要把 `<skill-dir>` 替换为某台机器上的固定绝对路径。安装后可用以下命令自检：

```bash
bash <skill-dir>/scripts/one-click-deploy.sh --help
```

默认 provider 是 `surge`。入口脚本会相对于自身位置加载 provider 脚本，因此从任意当前工作目录调用都可以。

## Provider 与选项

| Provider | 用途 | 主要选项 |
|---|---|---|
| `surge` | Surge 静态发布 | `--domain`、`--preview`、`--install`、`--output-dir`、`--dry-run`、`--no-verify` |
| `cf-pages` | Cloudflare Pages Direct Upload | `--name`、`--output-dir`、`--branch`、`--preview`、`--install`、`--domain`、`--dry-run`、`--no-verify` |

运行 provider 的 `--help` 查看完整参数。未知参数会以退出码 `2` 拒绝；目录或前置检查失败通常返回 `1`；认证失败返回 `3`。`--dry-run` 只执行本地目录、安全文件和配置检查，不安装 CLI、不访问 provider、不上传。

## 发布目录

- 直接传入包含 `index.html` 的静态目录；
- 对前端项目，默认识别 `dist/`、`build/`，也可以显式传入 `--output-dir DIR`；
- 不自动安装依赖、不自动运行 build；
- 发布目录必须位于传入的项目路径内（直接传入的绝对输出目录除外，仅用于兼容 provider 脚本的显式路径行为）。

## Surge

依赖 Surge CLI 和已完成的 Surge 登录：

```bash
one-click-deploy ./dist --provider surge --domain my-site.surge.sh
surge login
```

只有显式传入 `--install` 才会运行 `npm install --global surge`。`--domain` 仅设置发布目标，不修改 DNS。

## Cloudflare Pages

依赖 Wrangler。优先使用 OAuth：

```bash
wrangler login
wrangler whoami
one-click-deploy ./dist --provider cf-pages --name my-site
```

远程或无图形界面环境可以使用环境变量：

```bash
export CLOUDFLARE_API_TOKEN='your-token'
export CLOUDFLARE_ACCOUNT_ID='your-account-id'
```

Token 只在运行部署的终端中配置，不要发送给 Agent、写进脚本或提交 Git。缺少 Wrangler 时，只有显式传入 `--install` 才会通过 npm 安装。

`--domain` 只输出 Custom Domains 配置提示，不修改 DNS。部署 URL 会在未使用 `--no-verify` 时进行 HTTPS HEAD 验证。

## 安全边界

- 只发布用户明确指定或脚本自动识别的静态目录；
- 拒绝包含 `.env`、私钥、证书和常见凭据文件的目录；
- 不使用 `sudo`，不初始化 Git，不创建仓库，不修改 DNS；
- 发布属于外部写入操作，Agent 应在执行前展示 provider、项目、目录和 branch 摘要；
- 不保存或回显密码、Token 或其他秘密。

## 目录约定

可分发包至少包含：

```text
one-click-deploy/
├── SKILL.md
├── README.md
├── metadata.json
└── scripts/
    ├── one-click-deploy.sh
    ├── deploy-surge.sh
    └── deploy-cloudflare-pages.sh
```

## 参考

- [Cloudflare Pages Direct Upload](https://developers.cloudflare.com/pages/get-started/direct-upload)
- [Wrangler Pages commands](https://developers.cloudflare.com/workers/wrangler/commands/pages)
- [Pages custom domains](https://developers.cloudflare.com/pages/configuration/custom-domains)
- [Pages API permissions](https://developers.cloudflare.com/pages/configuration/api)

