如何解决在 nextjs 中使用 sequelize 连接 mysql 报错:Please install mysql2 package manually

解决方案

手动设置 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值