Migration 升级脚本
在 NocoBase 插件的开发与更新过程中,插件的数据库结构或配置可能会发生不兼容的变化。为了保证升级的平滑执行,NocoBase 提供了 Migration 机制——通过编写 migration 文件来处理这些变更。
Migration 的概念
Migration 是插件升级时自动执行的脚本,用于解决以下问题:
- 数据表结构调整(新增字段、修改字段类型等)
- 数据迁移(如字段值的批量更新)
- 插件配置或内部逻辑更新
Migration 的执行时机分为三类:
创建 Migration 文件
Migration 文件放在插件目录下的 src/server/migrations/*.ts 中。NocoBase 提供了 create-migration 命令快速生成 migration 文件。
可选参数
示例
生成的 migration 文件路径如下:
文件初始内容:
appVersion 用于标识升级所针对的版本,小于指定版本的环境会执行该 migration。
编写 Migration
在 Migration 文件中,你可以通过 this 访问以下常用属性和 API,方便操作数据库、插件及应用实例:
常用属性
-
this.app当前 NocoBase 应用实例,可用于访问全局服务、插件或配置。 -
this.db数据库服务实例,提供对模型(Tables)操作的接口。 -
this.plugin当前插件实例,可用于访问插件的自定义方法。 -
this.sequelizeSequelize 实例,可直接执行原生 SQL 或事务操作。 -
this.queryInterfaceSequelize 的 QueryInterface,常用于修改表结构,比如新增字段、删除表等。
编写 Migration 示例
除了上面列出的常用属性,Migration 还提供更多 API,详细用法见 Migration API。
触发 Migration
Migration 的执行由 nocobase upgrade 命令触发:
升级时,系统会根据 Migration 的类型和 appVersion 判断执行顺序。
测试 Migration
在插件开发中,建议用 Mock Server 测试 migration 是否正确执行,避免破坏真实数据。
使用 Mock Server 可以快速模拟升级场景,并对 Migration 执行顺序和数据变更进行验证。
开发实践建议
- 拆分 Migration 每次升级尽量生成一个 migration 文件,保持原子性,便于排查问题。
- 指定执行时机
根据操作对象选择
beforeLoad、afterSync或afterLoad,避免依赖未加载的模块。 - 注意版本控制
用
appVersion明确 migration 适用的版本,防止重复执行。 - 测试覆盖 先在 Mock Server 上验证 migration,再到真实环境中执行升级。
相关链接
- Collections 数据表 — Migration 中常需调整的数据表结构定义
- Database 数据库操作 — Migration 中通过
this.db操作数据的 API - Plugin 插件 — Migration 文件在插件中的组织与加载方式
- Command 命令行 — 通过
nocobase upgrade和create-migration命令触发迁移 - Test 测试 — 使用 Mock Server 测试 Migration 的执行结果
- Migration API — Migration 类的完整 API 参考

