解决方案
手动设置 dialectModule
的值为 mysql2
。增加 dialectModule
配置即可。
import mysql2 from 'mysql2'
import { Sequelize } from 'sequelize'
const { DB_DATABASE, DB_USER, DB_PASSWORD, DB_HOST, DB_PORT, DB_LOGGING, DB_POLL_MAX, DB_POLL_MIN, DB_POLL_ACQUIRE, DB_POLL_IDLE, } = process.env
const sequelize = new Sequelize(DB_DATABASE, DB_USER, DB_PASSWORD, {
host: DB_HOST, // 主机
dialect: 'mysql', // 指定连接的数据库类型
port: +DB_PORT, // 端口
// 增加这个配置
dialectModule: mysql2,
})
问题原因
webpack
不支持动态导入导致的。sequelize
内部使用 require
动态导入 dialectModule
配置
源码: node_modules/.pnpm/sequelize@6.37.3_mysql2@3.11.3/node_modules/sequelize/lib/dialects/abstract/connection-manager.js
问题 issues
扩展
如果发现解决完之后还有链接数据库会有警告
Critical dependency: the request of a dependency is an expression
Import trace for requested module:
修改 nextjs配置
(next.config.mjs
) 即可。
// 增加配置
const nextConfig = {
// 增加配置即可
experimental: {
serverComponentsExternalPackages: ['sequelize',],
},
}
问题issue