执行Sequelize CLI迁移回滚时遇ES模块导入错误求助
解决Sequelize CLI在ES模块项目中的回滚迁移错误
问题根源
你的项目通过"type":"module"启用了ES6模块规范,但Sequelize CLI默认基于CommonJS运行,迁移文件里的ES语法与多余的严格模式声明引发了解析错误。
修复步骤
移除迁移文件冗余代码
删除迁移文件第一行的'use strict';——ES模块默认启用严格模式,这个声明完全多余,还会干扰代码解析。补全异步操作的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') } };配置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来完成回滚操作。确保配置文件为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
相关产品推荐
相关产品推荐

