如何在server.js中以ES6方式导入Sequelize的users模型?已设type:module仍报错
解决Sequelize模型ES6导入报错问题
问题背景
已在package.json中配置"type": "module",项目其他模块采用ES6方式导入均正常,但在server.js中导入Sequelize的users模型时抛出错误。
相关代码
- users模型文件(user.js):
'use strict'; module.exports = (sequelize, DataTypes) => { const users = sequelize.define('users', { id: { type: DataTypes.INTEGER(10), allowNull: false, primaryKey: true, autoIncrement: true }, email: { type: DataTypes.STRING(100), allowNull: false }, password: { type: DataTypes.STRING(100), allowNull: false } }, { timestamps: true, tableName: 'users' }); return users; };
- server.js导入代码:
import usersSchema from "./modals/users.js";
控制台错误信息
node:40244) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension. (Use `node --trace-warnings ...` to show where the warning was created) C:\Project\study\matblogs\src\server.js:23
原因分析
- 模型文件采用CommonJS的
module.exports导出,与项目ES模块环境的导入方式不兼容,即使Node允许混合加载,仍可能触发兼容性警告。 - 导入路径存在拼写错误:
./modals/users.js中的modals大概率应为models,路径错误会导致文件加载失败,进而触发类似警告。
解决方案
1. 将模型文件改为ES6导出格式
修改user.js的导出语句,将module.exports替换为export default:
'use strict'; export default (sequelize, DataTypes) => { const users = sequelize.define('users', { id: { type: DataTypes.INTEGER(10), allowNull: false, primaryKey: true, autoIncrement: true }, email: { type: DataTypes.STRING(100), allowNull: false }, password: { type: DataTypes.STRING(100), allowNull: false } }, { timestamps: true, tableName: 'users' }); return users; };
2. 修正导入路径拼写
将server.js中的导入路径改为正确的文件夹名称(假设文件夹名为models):
import usersSchema from "./models/users.js";
3. 确认package.json配置正确性
确保"type": "module"位于package.json顶层,示例配置:
{ "name": "matblogs", "version": "1.0.0", "type": "module", // 其他配置项... }
内容的提问来源于stack exchange,提问作者soccerway
相关产品推荐
相关产品推荐

