如何使用 Surge 部署静态网站?
更新时间
在项目目录中运行 surge 命令,按提示确认项目路径和域名,即可把静态站点发布到 Surge 的 CDN 上。它面向静态网站和客户端应用,通过 CLI 完成部署,适合手写 HTML/CSS/JS、静态站点生成器产物或前端构建结果。前提是你已经有一个可本地打开或构建完成的静态项目,并且本机可以运行 npm 相关命令。
部署前需要准备什么
Surge 的定位是“Static web publishing for Front-End Developers”,部署入口是命令行。开始前确认:
- 项目已经生成静态文件,例如
index.html、CSS、JS 和资源文件。 - 本机可以使用 Node.js 与 npm 环境(Surge CLI 通过 npm 安装或作为 devDependency 使用)。
- 你清楚要发布的目录,例如
dist、build或项目根目录。 - 如果使用自定义域名,需要能修改该域名的 DNS 解析。
Surge 页面列出了这些随项目提供的特性:免费自定义域名支持、为 surge.sh 子域名提供免费 SSL、单页应用的 pushState 支持、自定义 404.html、通过 CLI 无障碍部署、跨域资源共享支持等。这些是选择 Surge 时可以直接核对的部署能力。
用 CLI 发布:从安装到上线
Surge 官方给出的最短路径是“六次击键”:在项目目录中输入 surge 并回车,项目就会立即上线。实际流程可以拆成下面几步。
1. 安装 Surge CLI
如果只是本地使用,可以全局安装;如果希望把部署写进项目脚本,可以安装为开发依赖:
npm install --save-dev surge
页面同时提到 Grunt、Gulp、npm run scripts 等集成方式,说明 Surge 可以嵌入你已有的构建工具链,而不是要求换一套发布流程。
2. 在项目目录运行部署命令
进入项目目录后执行:
surge
预期会看到类似下面的交互过程:
$ surge
project: path/to/my-project
domain: my-project.surge.sh
upload: [ ============ ]
Success! Published and running at my-project.surge.sh
这里需要理解三个输入的含义:
project:要上传的本地目录。默认通常是当前目录,也可以手动指定路径。domain:发布后使用的域名。首次部署可以接受 Surge 生成的*.surge.sh子域名,也可以填写自定义域名。upload:上传进度。出现Success!和可访问地址,表示发布完成。
3. 验证部署结果
部署成功后,终端会输出类似 Published and running at my-project.surge.sh 的地址。用浏览器打开该地址,确认首页、静态资源和子页面能正常加载。如果项目是单页应用,还要检查直接访问非根路径时是否按预期回退到入口页面。
4. 指定项目路径和域名
如果不想使用默认值,可以在命令中直接指定,减少交互:
surge path/to/my-project my-project.surge.sh
第一个参数是本地目录,第二个参数是目标域名。这样适合把部署命令固定到 npm script 或 CI 流程中。
和构建工具、静态站点生成器怎么配合
Surge 的设计是“augments the tools you already love”,也就是增强现有工具,而不是替代它们。页面给出的集成方式包括:
| 方式 | 做法 | 适用场景 |
|---|---|---|
| npm run scripts | 安装 Surge CLI 后,在 package.json 中配置脚本 |
已有 npm 工作流的前端项目 |
| Grunt | 安装 grunt-surge 插件,使用 grunt deploy |
使用 Grunt 构建的项目 |
| Gulp | 把 surge 作为 devDependency,在 Gulpfile 中调用 | 使用 Gulp 构建的项目 |
| Git Hooks | 每次推送到 GitHub 时部署,不需要切换分支 | 希望推送即发布的仓库 |
| Jekyll | 本地编译后发布到 Surge | Jekyll 站点,避免分支和插件限制 |
| 静态站点生成器 | 用 Surge CLI 发布生成结果 | 手写 HTML 或高度定制的生成器 |
关键点是:先让构建工具产出静态文件,再把产物目录交给 Surge。不要把源文件目录和构建产物目录混在一起,否则可能把不需要的文件一起上传。
常见卡点
- 部署后页面 404 或资源加载失败:先确认上传的是构建产物目录,而不是项目根目录;再检查资源路径是否以
/开头导致子路径下解析错误。 - 单页应用刷新后 404:Surge 提供 pushState 支持,但需要确认入口文件和路由回退配置正确。
- 自定义域名不生效:Surge 支持免费自定义域名,但域名解析需要按 Surge 的要求配置;DNS 生效需要时间。
- 想用自定义 404 页面:在项目中放置
404.html,Surge 会使用它作为错误页。 - 团队协作:页面提到 “Invite your team”,说明可以通过邀请成员参与项目,而不是只靠个人账号发布。
什么时候选 Surge
如果你的项目是纯静态站点或客户端应用,并且希望用命令行快速发布、把部署接入现有构建工具,Surge 的路径很短:安装 CLI、运行 surge、确认域名、拿到可访问地址。它提供 surge.sh 子域名、免费 SSL、自定义域名支持和 pushState 等静态发布常用能力。
如果你需要服务端渲染、数据库或复杂后端逻辑,Surge 的静态发布模型并不覆盖这些需求。先确认项目能产出静态文件,再决定是否用它作为发布层。