.sb3文件本质是zip压缩包,解压后需保留哈希命名的资源文件和原目录结构,并通过本地http服务运行含scratch-gui的html页面加载project.json。

sb3 文件本质是 zip 压缩包,直接解压就能拿到 HTML 所需资源
Scratch 3.0 的 .sb3 文件不是黑盒,它就是一个标准的 ZIP 归档,里面包含 project.json、音频、图像、SVG 等资源。所谓“转成 HTML”,其实是把项目运行所需的全部内容组织起来,用一个 HTML 页面加载 Scratch VM 运行时来执行它。
关键点在于:你不能只提取文件就完事——project.json 里记录的是资源的哈希路径(比如 "md5ext": "abc123.png"),而解压后文件名就是那个哈希名,必须原样保留;否则运行时找不到素材,会白屏或报错 Failed to load resource。
- 用系统自带解压工具或
unzip命令解压,别用某些压缩软件“自动重命名中文/特殊字符” - 解压后目录结构必须保持原样:
project.json在根目录,所有*.png、*.wav等都在同一层 - 不要手动改
project.json里的md5ext字段——改了就和文件名对不上
用官方 scratch-gui 启动本地 sb3 需要起一个本地服务
浏览器出于安全策略,禁止从 file:// 协议直接加载 project.json(会触发 CORS 错误,控制台报 Access to XMLHttpRequest at 'file:///...' from origin 'null' has been blocked)。所以必须用 HTTP 服务打开 HTML 页面。
最轻量的做法是用 Node.js 的 http-server 或 Python 内置模块,不装任何构建工具:
立即学习“前端免费学习笔记(深入)”;
- Node 用户:先全局安装
http-server(npm install -g http-server),进到解压后的目录,运行http-server -p 8080 - Python 3 用户:进目录后运行
python3 -m http.server 8080 - 访问
http://localhost:8080就能看到空白页面——还没加 HTML 入口
最小可用 HTML 文件只需加载 scratch-gui + 指定 sb3 路径
Scratch 官方提供了可离线运行的 scratch-gui 构建产物,不需要自己编译。你只需要一个 HTML 文件,引入它的 JS/CSS,并告诉它加载哪个 project.json。
本文档主要讲述的是maven使用方法;Maven是基于项目对象模型的(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。Maven将你的注意力从昨夜基层转移到项目管理层。Maven项目已经能够知道 如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
去 GitHub releases 页面 下载最新版 scratch-gui-v*.zip(比如 scratch-gui-v3.27.0.zip),解压后把里面的 build/ 整个文件夹复制到你的 sb3 解压目录下(同级)。
然后在该目录新建一个 index.html:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"></head>
<body style="margin:0">
<div id="app"></div>
<script src="build/static/js/main.f9e4d6c1.js"></script>
<script>
window.scratchGuiOptions = {
projectUrl: './project.json'
};
</script>
</body>
</html>
注意:main.f9e4d6c1.js 名字每次 release 都不同,得按你下载的 build/static/js/ 里实际文件名改;projectUrl 必须是相对路径,且指向解压出的 project.json。
常见失败原因:跨域、路径错、资源缺失、版本不匹配
跑不起来?八成卡在这几个地方:
- 没起本地服务,直接双击
index.html→ 浏览器报CORS或net::ERR_FILE_NOT_FOUND -
projectUrl写成'./project.json?time=123'这类带查询参数的 → Scratch GUI 不识别,静默失败 - 音频文件是
.mp3但浏览器不支持(尤其 Safari),换成.wav或.ogg更稳妥 - 用了较新的 Scratch 功能(如自定义渲染器、新扩展),但下载的
scratch-gui版本太旧 → 检查project.json顶部的runtimeVersion,选对应 release - 解压时把
project.json放进了子文件夹(比如my-project/project.json)→projectUrl得同步改成'./my-project/project.json',且所有资源也得在my-project/下
真正麻烦的不是转换动作本身,而是路径和权限这两个隐形关卡——它们不报错,只让画面停在加载动画,或者角色不动、声音不响。多看浏览器开发者工具的 Network 和 Console 标签页,比反复重试更省时间。









