4.3 KiB
中社后端接入
编辑器、播放器和嵌入页使用本站作品 ID。社区主站 Frontend 不在本次改动范围。
本地开发
- 在 Backend 配置数据库并执行
npm ci、npm run migrate,确认迁移 008 已应用。 - Backend 的
ALLOWED_ORIGINS加上http://localhost:8601;保留已有主站 Origin。 - 在 Backend 执行
npm run assets:import -- --gui ../scratch-gui,再加--check校验素材完整。 - 启动 Backend(默认 3000),在本仓库执行
npm ci和npm start。 如果安装时跳过了 lifecycle scripts,先执行npm run prepublish下载并校验 micro:bit 资源。 - 打开
http://localhost:8601/editor.html,点右上角“登录以保存”,使用后端已注册账号。 本页面不创建账号,注册沿用主站。
开发构建默认 API 为 http://localhost:3000/api。可在启动或构建时用环境变量指定,例如:
SCCN_API_BASE=https://api.example.com/api npm start
SCCN_API_BASE=https://api.example.com/api NODE_ENV=production npm run build
生产未指定时默认同源 /api,需反向代理到 Backend。API 地址不能由 URL 参数覆写。
Cookie 请求始终携带 credentials;跨站部署需要后端启用 HTTPS、Secure、SameSite=None,
并允许编辑器 Origin。浏览器限制第三方 Cookie 时优先部署同源反向代理。
使用流程
- 登录恢复后,编辑中的新作品自动建立私有草稿;修改后 30 秒自动保存。
- 文件菜单“立即保存”或 Ctrl/Cmd+S 保存到服务器;未登录时仍可下载到本地。
- “保存副本”把当前编辑状态保存为新 ID,不修改原作;版本冲突后也可用它保留修改。
- 右上角“我的作品”分页列出自己的作品;切换时对未保存修改提示确认。
editor.html#123打开作品 123;刷新后读取后端最新版本、标题和素材。- 保存本地导入或
project_url导入的项目后,清除导入参数,刷新时使用本站副本。 - 本地
.sb3导入/导出、打包功能保留。默认角色、背景、库素材和字体也会首次上传到本站, 不会误用 Scratch 的asset.clean标记跳过上传;当前页面成功上传过的素材不重复上传。 - 素材库缩略图、角色全部造型、声音预览与添加统一读取本站;不再回退到 Scratch 官方素材站。
- 后端未提供云变量服务,因此不接入 TurboWarp 公共云变量服务器,避免本站 ID 与官方 ID 混用。
保存与错误处理
保存使用与实际加载内容绑定的 revision。恢复登录、窗口重新获得焦点时刷新权限, 不会替换本地 revision,因此不会把旧作品当作最新版本覆盖服务器。401 提示重新登录; 409 保留编辑内容,提示下载备份或保存副本。私有作品未登录时显示登录与重新加载入口。 上传或保存失败不会显示保存成功;保存期间继续修改的内容保持未保存状态。
后端保存后的缩略图由 VM 截图上传。标题修改同样标记作品已变更并参与保存。 复制/改编的新作品默认私有;本次未增加发布/审核、删除、社区页面或注册流程。
验证
npx jest --runInBand test/unit/sccn test/unit/reducers/project-state-reducer.test.js
npm run test:unit
npm run build
接入与状态机 53 项测试、既有 addon 33 项测试通过。浏览器联调使用隔离 MySQL 9.7 数据库, 验证登录/退出、新建、标题与快捷键保存、刷新恢复角色与背景、副本、我的作品、私有访问限制和 并发冲突后另存副本。未使用业务库,未部署生产。
旧的 test/unit/util/project-saver-hoc.test.jsx 与 project-fetcher-hoc.test.jsx 不在默认测试脚本中:
当前 Jest 配置缺 DOM 环境及 webpack inline-loader 映射,直接执行会失败;本轮未扩展该旧测试环境。
本次新增及其余改动源码 lint 通过;菜单文件仍有 24 项既存 lint 错误(HEAD 为 25 项),未做无关清理。
素材与生产部署
完整的素材导入、离线迁移、Nginx/systemd 配置、升级和备份步骤见 Backend 部署说明。 首次部署必须先导入素材,再发布 GUI;本轮已导入 1,305 个素材并完成完整性校验。