关于 tina-schema-sync
在 TinaCMS Schema 变更后重新生成并提交相关产物的 Skill。它引导开发者使用 `tinacms dev` 本地生成、验证文件并准备部署,也涵盖 `tinacms build` 无法播种内容的情况。
主要功能
- 01使用 `tinacms dev` 重新生成产物
- 02验证生成类型和锁定文件
- 03检查凭据及本地端口
- 04将生成文件一并提交
- 05排查 Schema 同步失败
适用场景
- 01编辑 `tina/config.ts` 后同步产物
- 02生成时处理未知区块类型
- 03为 Vercel 部署准备 Schema 产物
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ genericservice/ claude-skills --skill tina-schema-sync安装后在 Claude Code 中输入/tina-schema-sync确认已加载。
详细介绍
TinaCMS 模式同步
在本地重新生成 TinaCMS 构建产物,并在模式变更后将其提交。此流程适用于混合部署策略:在 Vercel 上跳过 tinacms build,并预先提交构建产物。
适用场景
- 编辑
tina/config.ts后(添加字段、区块或集合) - 升级
@tinacms/cli后 pnpm tina:build因“Unable to seed”(内容引用了未知区块类型)而失败时- Vercel 部署成功,但新区块未显示时
前置条件
- 在
.env.local中配置 TinaCloud 凭据:NEXT_PUBLIC_TINA_CLIENT_ID="..." TINA_TOKEN="..." - 如果
.env.local不存在,请运行./scripts/pull-secrets.sh,或从.env.example复制并根据 TinaCloud 控制面板填写相应值。
流程
步骤 1:载入凭据
source .env.local
确认凭据已设置:
echo $NEXT_PUBLIC_TINA_CLIENT_ID | head -c 10
echo $TINA_TOKEN | head -c 10
步骤 2:运行开发服务器以重新生成构建产物
NEXT_PUBLIC_TINA_CLIENT_ID="$NEXT_PUBLIC_TINA_CLIENT_ID" \
TINA_TOKEN="$TINA_TOKEN" \
npx tinacms dev --noWatch --noTelemetry
等待出现“已启动 TinaCMS 开发服务器”消息,然后停止服务器(按 Ctrl+C 或终止进程)。
为什么使用 tinacms dev 而不是 tinacms build? 构建命令会连接 TinaCloud 进行索引。如果内容已引用 TinaCloud 模式中尚未定义的新区块类型,构建就会因“Unable to seed”而失败。开发服务器无需 TinaCloud 先重新索引,即可在本地生成构建产物。
步骤 3:确认构建产物已重新生成
git status tina/
你应该会看到以下文件发生变更:
tina/__generated__/client.tstina/__generated__/types.tstina/tina-lock.json
同时检查 public/admin/ 是否有变更。
步骤 4:确认新类型存在
如果你添加了新区块类型(例如 ContentTypes):
grep "ContentTypes" tina/__generated__/types.ts
步骤 5:提交全部三组构建产物
git add tina/__generated__/ tina/tina-lock.json public/admin/
git commit -m "chore(tina): regenerate artifacts for [describe schema change]"
重要: TinaCloud 会读取 tina/tina-lock.json,以便在部署时了解模式。如果提交了生成的类型,却忘记提交锁文件,部署就会失败,或者新区块类型无法显示。
步骤 6:推送
git push
TinaCloud 会从推送的提交中读取锁文件,并正确索引模式。
Agent 工作流与氛围编程
- 迭代同步: 如果字段依赖关系复杂,不要指望模式能一次同步成功。如果开发服务器报错或未生成构建产物,请找出具体的模式错误,只修复一个集合或字段定义,然后重新运行同步流程,直到成功为止。
- 氛围编程: 在运行同步流程前,先为正在进行的
tina/config.ts变更创建本地语义化提交;同步成功后,再单独提交生成的构建产物。这样如果生成失败,你就可以轻松回滚。
故障排查
“Unable to seed content/pages/home.mdx”
内容文件引用了云端模式中未定义的区块类型。这正是此技能要处理的情况。请使用 tinacms dev(步骤 2),不要使用 tinacms build。
开发服务器无法启动
- 确认凭据已设置(步骤 1)
- 检查端口 4001 是否被占用:
lsof -i :4001 - 检查端口 6970 是否被占用:
lsof -i :6970
已生成类型,但锁文件未变更
模式变更可能尚未保存。运行开发服务器前,请确认 tina/config.ts 已写入。
检查清单
推送前,请确认:
-
tina/__generated__/client.ts有变更 -
tina/__generated__/types.ts包含新的类型定义 -
tina/tina-lock.json有变更 -
public/admin/已更新(如适用) - 以上四项均已暂存并一并提交