运行Knex迁移时如何使用自定义重写的FsMigrations类
解决Knex自定义FsMigrations注入问题
要让Knex的Migrator使用你重写的FsMigrations类,按以下步骤操作:
1. 自定义FsMigrations类
继承Knex原生的FsMigrations,重写需要修改的方法(比如处理文件扩展名的逻辑):
const { FsMigrations } = require('knex/lib/migrations/migrate/FsMigrations'); class CustomFsMigrations extends FsMigrations { // 重写获取迁移文件的方法,添加忽略扩展名的逻辑 async getMigrations() { const originalMigrations = await super.getMigrations(); // 这里根据需求调整文件名处理,比如移除扩展名 return originalMigrations.map(mig => ({ ...mig, name: mig.name.replace(/\.[^/.]+$/, '') })); } }
2. 自定义Migrator类
继承原生Migrator,在构造函数中替换默认的fsMigrations实例为自定义版本:
const { Migrator } = require('knex/lib/migrations/migrate/Migrator'); const CustomFsMigrations = require('./CustomFsMigrations'); // 引入你的自定义类 class CustomMigrator extends Migrator { constructor(knex) { super(knex); // 替换默认实例 this.fsMigrations = new CustomFsMigrations(this.config, this.knex); } }
3. 注入到Knex实例
初始化Knex后,替换其内置的migrator为自定义实例:
const Knex = require('knex'); // 初始化Knex实例 const knex = Knex({ client: '你的数据库客户端(如pg/mysql)', connection: '你的数据库连接信息', migrations: { directory: './migrations' // 你的迁移文件目录 } }); // 替换为自定义Migrator knex.migrator = new CustomMigrator(knex);
这样后续调用knex.migrate.*相关方法时,就会使用你重写的FsMigrations逻辑了。
内容的提问来源于stack exchange,提问作者user2992672
相关产品推荐
相关产品推荐

