SuperAPI AI 工具集

migrating-motoko-enhanced

编程与开发

查看项目

更新于 10-16 05:05

技能介绍

用途:在 canister 升级时管理 Motoko actor 持久状态的演进,适用于增删改持久字段、修改字段类型、重构状态,且项目已在 mops.toml 中配置 [canisters.<name>.migrations]。

主要能力:每个迁移模块捕获一次逻辑变更(新增、重命名、删除、转换字段),迁移按文件名字典序依次应用,建议用时间戳前缀命名。迁移模块导出 public func migration({...}) : {...};输入输出字段语义为:同时出现在输入输出表示转换,仅输出表示新增,仅输入表示消费删除,都未出现表示原样保留。编译器校验每个迁移的输入与前面所有迁移产生的状态兼容。

使用方式:目录结构为 backend/ 下含 main.mo、types.mo、lib/、mixins/ 与 migrations/。actor 变量声明不带初始化器,值来自迁移链;actor 体必须静态(除 <system> 调用如定时器外无顶层副作用)。在 mops.toml 配置 [canisters.backend.migrations] chain = "src/backend/migrations" 后,mops 会自动注入 --enhanced-migration,不要手动加到 args。随后运行 mops check --fix 与 mops build。

运行时行为:全新部署按序运行全部迁移;升级时只运行尚未应用的迁移;可安全跳过中间部署;迁移 trap 则升级中止,canister 保持旧版本。

限制:不能与 inline (with migration = ...) 组合;需要增强正交持久化;actor 变量不得有初始化器;actor 体必须静态;每个迁移后的状态须与下一迁移输入兼容;最终状态须匹配 actor 声明字段,最后迁移输出中未在 actor 声明的字段会被拒绝。

其他参考:可加载 motoko 获取语言与 mo:core API 参考,加载 migrating-motoko 了解无 --enhanced-migration 的内联迁移,加载 mops-cli 了解工具链。