首页
/ 使用 Azure Static Web Apps 部署 Terrarium 静态 Web 应用:Web-Dev-For-Beginners 实战指南

使用 Azure Static Web Apps 部署 Terrarium 静态 Web 应用:Web-Dev-For-Beginners 实战指南

2026-09-07 11:40:55作者:宣利权Counsellor

Terrarium(虚拟盆栽)是 Web-Dev-For-Beginners 课程中第 3 个项目板块的产物:仅用 HTML、CSS 与少量 JavaScript 即可拖拽植物素材、组装一只玻璃罐生态盆栽的纯前端示例。本指南以其 部署指南文档(阿拉伯语译文,英文原版见 3-terrarium/README.md)为骨架,完整讲解如何借助 Azure Static Web Apps 把它发布到公网:从 Fork 仓库、触发 "Deploy to Azure" 向导,到关键配置项(App root、API 跳过、自动生成 .github 工作流)的逐项说明,并结合仓库内真实源码与已生成的工作流文件,说明这类无后端、无构建过程的静态应用到底是如何被自动构建和发布的。

Terrarium 虚拟盆栽应用运行界面:中央为半透明的 CSS 玻璃罐,罐中摆放多株手绘多肉与仙人掌,左右两侧各为可拖拽的植物素材区

一、Terrarium 是一个什么样的项目:先弄清"要部署什么"

在动手部署前,先明确这份教程要发布的对象。Terrarium 对应课程第 3 板块,其成果是一套"代码冥想"式的拖拽小应用,全部源码位于 3-terrarium/solution

  • index.html:页面结构。左右两个 .container 容器(#left-container#right-container)各放 7 个 img.plant 植物素材(plant1plant14),中间 #terrarium 区域则用 jar-topjar-wallsdirtjar-bottom 等 div 拼出一个"玻璃罐"。
  • style.css:全部视觉。罐壁(.jar-walls)以半透明 #d1e1df 圆角矩形实现、侧栏(.container)固定 width: 15% 并绝对定位在左右两侧,罐子的圆角造型灵感来自 Jakub Mandra 的 glass jar CodePen(代码出处)。
  • script.js:唯一交互逻辑。通过 dragElement() 对 14 株植物逐一绑定 onpointerdown/onpointermove/onpointerup,用闭包捕获 pos1pos4 四个坐标变量实现拖拽(实现细节)。

关键结论对部署而言有三点,全部可以由源码直接印证:

  1. 纯静态:应用不依赖任何服务端语言与数据库,资源只有 .html/.css/.js 与图片。
  2. 无 API:没有任何 fetch 或后端接口调用——这也是部署向导中"跳过 API 配置"的依据。
  3. 无构建步骤:CSS/JS 为手写原生文件、HTML 直接引用(<link rel="stylesheet" href="./style.css"><script src="./script.js" defer>),不存在编译/打包产物。

以上特性恰好完全命中 Azure Static Web Apps 的定位:为无服务器后端需求的静态站点提供全球托管、自动 TLS 证书与 GitHub Actions 驱动的持续部署。

二、部署前置条件与四步总览

依据 部署指南文档(及 解决方案自述 的英文原述),完整流程为以下四步:

  1. Fork 本仓库 到你自己的 GitHub 账号(部署向导会在你的 Fork 上创建用于构建发布的工作流文件,因此原仓库是只读的,必须以你自己的 Fork 为目标)。
  2. 点击文档中的 "Deploy to Azure" 按钮(原文档以 Deploy to Azure 徽章形式给出,点击后会携带仓库信息跳转到 Azure 门户的静态 Web 应用创建向导)。
  3. 跟随设置向导创建应用,并完成下述三个关键配置。
  4. 等待 GitHub Actions 流水线首次运行完成,即可通过分配到的 URL 访问在线版 Terrarium。

三、向导中的三个关键配置项(务必理解每一项)

部署指南明确了配置向导中最重要、也最容易出错的三个点,逐条展开如下:

3.1 设置 App root(应用根目录)为 /solution 或代码库根目录

向导要求填写站点的"应用根目录",即 Web 服务器应把哪个目录当作站点首页的所在位置。文档给出的合法取值有两个:

取值 适用场景 说明
/solution 推荐 直接指向本教程现成可发布的 3-terrarium/solution,其中已包含可用的 index.html
代码库根目录(/ 当你把自己的页面放在仓库根目录时 需要自行组织文件,保证根目录存在作为入口的 HTML

对于本教程推荐的 /solution,从 index.html 可以看到它恰好满足静态站点入口的全部要求:<!DOCTYPE html> 根文档直接位于该目录下,且对 ./style.css./script.js./images/plant*.png 的引用全部是相对路径——这正是关键:相对路径意味着把该目录整体"平移"到任意静态服务器根目录都能正常工作,无需改动任何一行代码。

3.2 本应用没有 API,跳过 API 配置

向导中通常有 API 路径(api_location)一栏。部署指南明确:此应用不含 API,因此直接跳过。这一点由源码可完整佐证——script.js 全文件仅处理指针事件实现拖拽,不存在任何 fetch/XMLHttpRequest/WebSocket 调用;index.html 中引入的唯一外部资源是 Font Awesome 图标字体的 CDN 链接(index.html),属浏览器侧资源加载,与站点后端无关。

3.3 .github 文件夹会被自动创建,驱动构建与发布

文档明确指出:配置完成后,一个 .github 文件夹会被自动生成,用于帮助 Azure Static Web Apps 的构建服务编译并发布应用。这并非虚构的描述——本仓库中恰好保留着一个由同类向导生成的现成工作流,可作为"生成产物长什么样"的一手证据(详见下一节)。

四、仓库内真实工作流文件解读:自动发布机制原理解析

.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml 中,可以观察到 Azure Static Web Apps 向导在仓库中落地的工作流模板的真实形态,其核心结构如下(该文件是仓库中已存在的、为 quiz-app 生成的示例,用于说明向导产物格式,字段含义与教程描述一致):

  • 任务名称与触发条件:流水线名为 Azure Static Web Apps CI/CD;文件中的 build_and_deploy_job 定义了推送与 PR 场景下的构建部署任务,close_pull_request_job 负责 PR 关闭后清理临时环境。
  • 部署动作:核心步骤使用 Azure/static-web-apps-deploy@v1workflow 第 16 行),这正是向导在 .github 目录中自动生成的关键动作。
  • 三项路径配置字段workflow 第 21-25 行):
工作流字段 含义 Terrarium 场景对应值
app_location 应用源码路径,即向导中的 App root /solution
api_location API 源码路径;为空表示无 API 留空(跳过 API 配置)
output_location 构建产物输出目录;本项目无构建步骤,可留空 留空(直接托管 app_location 内的 index.html
  • 凭据注入azure_static_web_apps_api_token 引用仓库 Secret(AZURE_STATIC_WEB_APPS_API_TOKEN_*),repo_token 使用 GITHUB_TOKEN 用于在 PR 中回写部署评论——这些 Secret 均由向导自动配置,无需手动创建。

对照该模板即可理解:当你在自己的 Fork 上走完向导后,.github 下将出现一个把 app_location 指向 /solution、且 api_location/output_location 均为空的类似工作流;每次你向 Fork 的主分支推送代码,GitHub Actions 就会自动把 solution 目录发布为一个新的静态站点 URL,实现"推代码即上线"。

五、部署完成后的验证与持续更新

部署完成后,向导会返回形如 https://<name>.azurestaticapps.net 的站点地址。建议按以下清单验证:

  1. 打开站点 URL,确认标题 My Terrarium 与玻璃罐正常渲染(对照 index.html 中的 <header><h1> 结构)。
  2. 从左右两侧容器拖拽任意植物(如 plant1plant14)到罐中,观察 script.js 中闭包驱动的 offsetTop/offsetLeft 实时位移是否生效。
  3. 在浏览器开发者工具的 Network 面板确认 style.cssscript.js./images/plant*.png 均以 200 返回且无 404——由于全部是相对路径引用,目录映射正确与否会在此刻暴露。

后续更新也非常简单:修改你的 Fork 中 3-terrarium/solution 下的 HTML/CSS/JS 并推送,触发工作流后站点即自动重建;如需临时预览修改效果,也可本地直接用浏览器打开 solution/index.html(纯静态文件无需本地服务器即可运行,这也是本项目与 Static Web Apps 天然契合的原因)。

六、常见问题与注意事项

  • 不要把向导配置在原始仓库上.github 工作流会写入仓库,必须使用你自己的 Fork;直接基于本教程所依赖的原仓库操作没有意义也无法写入。
  • App root 与 app_location 必须一一对应:若你选择代码库根目录而非 /solution,请确认根目录下确有作为入口的 HTML 文件,否则站点会返回空白或 404。
  • 不要臆造 API 配置:Terrarium 无后端,任何 API 路径填写都会让构建服务去查找并不存在的函数目录,从而失败——严格遵守文档"跳过 API 配置"的建议。
  • 更新由推送触发:向导自动生成的工作流在每次向主分支推送(或合并 PR)时触发构建发布,未推送则站点保持上一次发布状态,属预期行为。

综上,在 Web-Dev-For-Beginners 的 Terrarium 课程中,你不仅完成了"用 HTML+CSS+JS 搭建交互应用"的练习,还通过 Azure Static Web Apps 走通了一条"零后端、零构建配置"的发布路径:Fork → Deploy 按钮 → 向导中设置 App root = /solution、跳过 API、接受自动生成的 .github 工作流。结合仓库内真实的工作流模板与源码,你可以清晰地把"部署向导中的每个字段"映射到"流水线中的每个动作",从而举一反三地部署课程中的其他纯前端项目(如打字游戏、浏览器扩展的静态页面等)。

登录后查看全文
热门项目推荐
相关项目推荐