纯 HTML 网站无法直接在 Deno Deploy 上线,因其不支持静态文件托管,必须用 Deno.serve 编写服务逻辑来读取并返回 index.html 及相关资源(如 CSS、JS、图片),且需正确设置 MIME 类型和显式包含所有静态文件。

纯 HTML 网站不能直接用 Deno Deploy 上线 —— 它不支持静态文件托管,必须套一层 Deno.serve 服务逻辑。
为什么直接扔 HTML 文件会 404
Deno Deploy 不是 Nginx 或 GitHub Pages,它只运行你写的 Deno 代码,不会自动查找并返回 index.html。上传一个 index.html 文件后访问域名,会触发 “no handler found” 错误,因为没有 Deno.serve 入口。
- 常见错误现象:
Cannot GET /或404 Not Found,即使文件已上传到项目根目录 - 根本原因:Deno Deploy 的运行模型是「函数即服务」,不是「文件即服务」
- 兼容性影响:哪怕只有 1 个 HTML + 1 个 CSS,也必须写 JS 服务逻辑来读取并返回它们
最简可行部署:用 Deno.serve 返回 index.html
只需一个 main.ts,读取本地 index.html 并返回响应。这是上线纯 HTML 站点的最小必要动作。
- 使用场景:个人介绍页、活动单页、文档落地页等无需后端逻辑的静态内容
- 注意路径:HTML 文件必须和
main.ts在同一仓库中,且用Deno.readTextFile("index.html")读取(不能用相对路径如./index.html) - 性能影响:每次请求都读磁盘?不,Deno Deploy 会缓存模块,但文件内容仍需 IO;对纯 HTML 小站点无感
import { serve } from "https://deno.land/std@0.224.0/http/server.ts";
serve(() => {
return new Response(
Deno.readTextFile("index.html"),
{ headers: { "content-type": "text/html; charset=utf-8" } }
);
});
加 CSS/JS 图片怎么办:统一走 URL.pathname 路由分发
浏览器加载 style.css 时会发新请求到 /style.css,你的服务必须能响应它,否则资源 404。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
- 常见错误现象:HTML 渲染了,但样式丢失、控制台报
Failed to load resource: the server responded with a status of 404 () - 必须手动处理路径:检查
req.url,匹配.html、.css、.js、.png等后缀,再用Deno.readFile或Deno.readTextFile返回对应文件 - 注意 MIME 类型:CSS 必须设
"text/css",JS 是"application/javascript",图片要按扩展名设"image/png"等,否则浏览器可能不解析 - 不推荐硬编码所有路径,用
new URL(req.url).pathname提取路径后做白名单或后缀映射更安全
build 和 deploy 命令怎么写
不需要构建步骤(没 JSX、没打包),但 deno deploy CLI 要求指定入口文件,且默认不上传非 TS/JS 文件 —— 所以必须显式包含 HTML 和资源。
- 命令示例:
deno deploy --project=my-site main.ts --entrypoint=main.ts --include=index.html,style.css,script.js - 容易踩的坑:
--include必须列出所有要读取的静态文件,漏一个就会NotFound;路径是相对于当前工作目录的,不是相对于main.ts - 配置项
--project是可选的,但建议加上,避免部署到默认项目导致覆盖 - 如果用了子目录(如
public/index.html),--include写public/index.html,代码里读取也要用相同路径:Deno.readTextFile("public/index.html")
真正麻烦的不是写几行代码,而是意识到 Deno Deploy 本质是个边缘函数平台 —— 它不替你做路由、不自动索引文件、不猜测你想返回什么。哪怕只是展示一个 HTML,你也得亲手告诉它:“这个路径,返回这个字节流”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










