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

Next.js中Drizzle-Kit CLI无法使用及bcrypt-ts模块导入错误排查

问题解决步骤

1. 解决drizzle-kit migrate找不到meta/_journal.json的问题

  • 检查drizzle.config.ts配置,确保schema指向你的db.ts文件,outDir设置为正确的迁移输出目录(比如./drizzle)
  • 若从未生成过迁移文件,先执行drizzle-kit generate命令,该命令会自动创建drizzle/meta目录及_journal.json文件
  • 若meta目录已丢失,手动创建drizzle/meta文件夹,再重新运行drizzle-kit generate生成完整迁移结构

2. 解决drizzle-kit push时的bcrypt-ts导入错误

问题根源是drizzle-kit默认使用CommonJS环境,而bcrypt-ts是ES模块,直接在db.ts中导入会导致语法错误。解决方式二选一:

方案一:分离运行时依赖与Schema定义

  • 将bcrypt-ts的哈希逻辑移至API路由或服务器组件中(比如注册用户时在服务器端调用bcrypt.hash处理密码)
  • db.ts仅保留表结构定义,不引入任何运行时依赖,示例:
import { pgTable, varchar } from 'drizzle-orm/pg-core';

export const users = pgTable('users', {
  id: varchar('id', { length: 255 }).primaryKey(),
  email: varchar('email', { length: 255 }).unique().notNull(),
  password: varchar('password', { length: 255 }).notNull(),
  role: varchar('role', { length: 50 }).notNull().default('user'),
});

方案二:为Drizzle单独配置ES模块环境

  • 创建drizzle.config.mjs文件(ES模块格式):
import { defineConfig } from 'drizzle-kit';

export default defineConfig({
  schema: './src/db.ts',
  out: './drizzle',
  dialect: 'postgresql', // 根据你的数据库类型调整
  dbCredentials: {
    url: process.env.DATABASE_URL,
  },
});
  • 执行drizzle-kit push时指定该配置文件:drizzle-kit push --config drizzle.config.mjs
  • 保持package.json的type为commonjs,避免影响Next.js运行

3. 恢复Next.js正常运行

不要修改package.json的type为module,Next.js对纯ES模块项目的兼容性仍有局限,采用上述方案二单独适配Drizzle的ES模块需求即可。

内容的提问来源于stack exchange,提问作者Jack Duffy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:08:19