Surge 部署的网站自带哪些功能?

更新时间

Surge 把静态项目发布到 CDN 后,每个项目都会自动获得一组基础能力:免费自定义域名支持、surge.sh 子域名的免费 SSL、单页应用所需的 pushState 支持、自定义 404.html 页面、跨域资源共享,以及通过 CLI 完成的无障碍部署。这些能力不需要额外配置,发布即生效,适合纯静态站点和客户端渲染的前端应用。

每个项目自带的默认能力

根据 Surge 官网列出的项目特性,部署完成后你会直接得到:

  • 免费自定义域名支持:可以把项目绑定到自己的域名,而不是只能停留在 *.surge.sh 子域名上。
  • surge.sh 子域名的免费 SSL:使用 Surge 分配的子域名时,HTTPS 由平台提供。
  • 单页应用的 pushState 支持:前端路由(如 React Router、Vue Router 的 history 模式)刷新页面不会直接 404。
  • 自定义 404.html 页面:在项目根目录放一个 404.html,访问不存在的路径时会展示你自己的错误页。
  • 跨域资源共享(CORS)支持:静态资源可以被其他域名的页面请求。
  • 通过 CLI 的无障碍部署:不需要在网页后台点选配置,命令行即可完成发布。

部署本身有多简单

Surge 的定位是“六次击键完成部署”。在项目目录下输入 surge 并回车,就会进入发布流程:

$ surge
    project: path/to/my-project
    domain: my-project.surge.sh
    upload: [ ============ ]
    Success! Published and running at my-project.surge.sh

输入、动作与预期结果对应关系如下:

环节 你输入的内容 发生什么 预期结果
启动 surge 在当前目录发起部署 提示填写项目路径和域名
指定项目 path/to/my-project 指定要上传的静态文件目录 准备上传
指定域名 my-project.surge.sh 选择发布地址 上传完成后即可访问
完成 等待上传进度条 文件推送到 CDN 显示 Success! 和访问地址

首次使用需要先安装 CLI,官网给出的方式是通过 npm 安装为开发依赖:

npm install --save-dev surge

和构建工具、工作流的配合

Surge 的设计是“增强你已经在用的工具”,而不是替换它们。官网明确列出以下集成方式:

  • Grunt:安装 grunt-surge 插件后,可直接使用 grunt deploy。
  • Gulp:把 surge 装为 devDependency,在 Gulpfile 中调用。
  • npm run scripts:安装 CLI 后,在 package.json 的 scripts 里加入部署命令。
  • Git Hooks:每次推送到 GitHub 时自动部署,不需要来回切换分支。
  • Jekyll:本地编译后发布到 Surge,不必担心分支管理或插件限制。
  • 静态站点生成器:手写 HTML/CSS/JS 或使用高度定制的生成器,都可以通过 CLI 快速部署。
  • Node.js:可以把 Surge 构建进自己的工具链。

适合谁、什么情况下选它

如果你的项目是纯静态站点或客户端渲染的前端应用,并且希望部署过程尽量少配置、少点击,Surge 的这套默认能力基本覆盖了上线所需的基础项。需要自定义域名、HTTPS、前端路由和错误页时,这些都不用额外开通。

反过来,如果项目依赖服务端渲染、数据库或运行时后端逻辑,Surge 的静态发布模型并不适用——它面向的是静态文件和客户端应用。

常见卡点

  • 自定义域名和子域名 SSL 是两件事:官网列出的免费 SSL 明确对应 surge.sh 子域名;绑定自己的域名时,SSL 情况需要以 Surge 定价页或实际配置为准。
  • pushState 支持不等于自动生成路由:它保证刷新不 404,但前端路由规则仍由你的应用代码决定。
  • 404.html 要放在发布目录里:只有上传的文件中确实包含 404.html,自定义错误页才会生效。
  • CLI 是主要入口:官网强调“通过 CLI 的无障碍部署”,网页端并不是主要操作方式。