You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Sequelize CLI迁移回滚时遇ES模块导入错误求助

解决Sequelize CLI在ES模块项目中的回滚迁移错误

问题根源

你的项目通过"type":"module"启用了ES6模块规范,但Sequelize CLI默认基于CommonJS运行,迁移文件里的ES语法与多余的严格模式声明引发了解析错误。

修复步骤

  1. 移除迁移文件冗余代码
    删除迁移文件第一行的'use strict';——ES模块默认启用严格模式,这个声明完全多余,还会干扰代码解析。

  2. 补全异步操作的await关键字
    你的up和down方法是async函数,但调用queryInterface的异步方法时未加await,会导致操作未完成就终止,补上后代码如下:

    /** @type {import('sequelize-cli').Migration} */
    export default {
      async up (queryInterface, Sequelize) {
        await queryInterface.addColumn('Users','deletedAt', {
          type: Sequelize.TIME
        })
      },
    
      async down (queryInterface, Sequelize) {
        await queryInterface.removeColumn('Users','deletedAt')
      }
    };
    
  3. 配置Sequelize CLI兼容ES模块
    直接使用npx sequelize-cli会因CommonJS与ES模块的冲突报错,需要通过Node参数指定模块解析规则,在package.json的scripts中添加专属命令:

    "scripts": {
      "test": "echo \"Error: no test specified\" && exit 1",
      "migrate": "node --experimental-specifier-resolution=node node_modules/sequelize-cli/lib/sequelize db:migrate",
      "migrate:undo": "node --experimental-specifier-resolution=node node_modules/sequelize-cli/lib/sequelize db:migrate:undo"
    }
    

    之后执行npm run migrate:undo来完成回滚操作。

  4. 确保配置文件为ES模块格式
    如果你的Sequelize配置文件(如config/config.js)仍使用CommonJS的module.exports,改为ES模块的export default:

    export default {
      development: {
        username: '你的数据库用户名',
        password: '你的数据库密码',
        database: '你的数据库名',
        host: '127.0.0.1',
        dialect: 'mysql'
      }
    }
    

验证

运行npm run migrate:undo,即可正常执行迁移回滚操作。

内容的提问来源于stack exchange,提问作者surya narayanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:37:01