Surge 能和哪些构建工具或工作流配合使用?
更新时间
Surge 可以配合 Grunt、Gulp、npm run 脚本、Git Hooks,以及 Jekyll 和各类静态站点生成器使用。它的定位是“增强你已经在用的工具”,而不是替换它们:你继续用原有构建流程生成静态文件,再把产物交给 Surge 发布。判断是否适合自己,关键看两点:你的项目最终能否输出纯静态文件,以及你希望部署发生在构建流程的哪一步。
支持的构建工具与接入方式
| 工具/工作流 | 接入方式 | 适合的场景 |
|---|---|---|
| Grunt | 安装 grunt-surge 插件,之后使用 grunt deploy |
已有 Grunt 构建链,想把部署做成一个 task |
| Gulp | 将 surge 作为 devDependency 安装,在 Gulpfile 中使用 | 已有 Gulp 流程,部署作为其中一个步骤 |
| npm run 脚本 | 安装 Surge CLI,在 package.json 的 scripts 中调用 | 不想引入额外插件,用最少的依赖完成部署 |
| Git Hooks | 在推送时触发部署 | 希望每次 push 到 GitHub 就自动上线,且不想手动切换分支 |
| Jekyll | 本地编译后发布到 Surge | 用 Jekyll 生成站点,想避开分支管理和插件限制 |
| 静态站点生成器 | 通过 Surge CLI 部署生成结果 | 手写 HTML/CSS/JS,或使用高度定制的生成器 |
| Node.js | 把 Surge 构建进自己的工具 | 需要把部署能力封装进自研脚本或平台 |
为什么这些工具都能接进来
Surge 的核心入口是 CLI:在项目目录里输入 surge 并回车,它会要求你确认项目路径和域名,然后上传并返回发布地址。例如:
$ surge
project: path/to/my-project
domain: my-project.surge.sh
upload: [ ============ ]
Success! Published and running at my-project.surge.sh
因为部署动作被压缩成一条命令,任何能执行命令的构建工具都可以把它串进自己的流程里。Grunt 用插件封装,Gulp 和 npm scripts 直接调用,Git Hooks 则在推送事件上触发同一条命令。
部署后默认带哪些能力
每个 Surge 项目都包含这些特性,接入构建工具后同样生效:
- 免费的自定义域名支持
- surge.sh 子域名的免费 SSL
- 单页应用(SPA)的 pushState 支持
- 自定义 404.html 页面
- 通过 CLI 的无障碍部署
- 跨域资源共享(CORS)支持
这些能力对前端项目比较实用:SPA 路由不会因为刷新而 404,自定义错误页可以直接放在静态目录里。
怎么选:按你现有的流程决定
- 已经在用 Grunt:装 grunt-surge,把部署变成一个 task,改动最小。
- 已经在用 Gulp 或 npm scripts:把 surge 装成 devDependency,在原有脚本里加一步即可,不必额外学插件。
- 希望 push 即上线:用 Git Hooks,省去手动部署和分支切换。
- 用 Jekyll 或静态站点生成器:本地编译出静态文件,再用 CLI 发布,不需要为部署改变生成方式。
- 想把部署嵌进自研工具:Surge 提供 Node.js 层面的集成方式,可以构建进自己的工具链。
如果你的项目无法输出纯静态文件,或者部署必须依赖服务端运行时,Surge 的这套集成方式就不适用。