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

运行drizzle-kit generate:pg遇模块导入语法错误求助

解决Drizzle生成PostgreSQL迁移文件的模块语法错误

问题根源

这个报错是因为Node.js把Drizzle ORM的ESM模块文件当成CommonJS模块加载了,导致import语句不被识别。说白了就是项目用的CommonJS模块系统,和Drizzle现在优先用ESM的模式冲突了。

两种解决办法

办法1:把项目改成ESM模式

  1. 打开package.json,添加一行"type": "module":
{
  "name": "streaming-platform",
  "version": "0.0.1",
  "type": "module", // 新增这行
  "description": "",
  // 其他原有配置保持不变
}
  1. 调整tsconfig.json(没有的话就新建一个),适配ESM规范:
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "NodeNext",
    "esModuleInterop": true,
    "skipLibCheck": true,
    "strict": true,
    "outDir": "./dist"
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules"]
}
  1. 更新package.json里的脚本,适配ESM运行方式:
"scripts": {
  "dev": "nodemon --exec ts-node-esm src/main.ts",
  "start": "ts-node-esm src/main.ts",
  "migrate": "drizzle-kit generate:pg" // 直接用配置文件里的参数,不用重复编写
},

办法2:不切换模块系统,修改Drizzle配置

如果不想切换到ESM模式,可以试试以下操作:

  1. 把drizzle.config.json改名为drizzle.config.cjs,改用CommonJS语法编写:
module.exports = {
  out: "./migrations",
  schema: "./src/db/schema.ts",
  breakpoints: false
};
  1. 检查tsconfig.json,确保核心配置正确:
{
  "compilerOptions": {
    "module": "CommonJS",
    "esModuleInterop": true,
    // 其他原有配置保持不变
  }
}
  1. 执行迁移命令时显式指定tsconfig文件:
drizzle-kit generate:pg --tsconfig tsconfig.json --out migrations-folder --schema src/db/schema.ts

额外检查点

  • 确认src/db/schema.ts中的导入语句是标准ESM语法,比如:
import { pgTable, serial, text } from "drizzle-orm/pg-core";
  • 删掉node_modules和package-lock.json,重新安装依赖:
rm -rf node_modules package-lock.json
npm install

内容的提问来源于stack exchange,提问作者Chirag Bhatnagar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:15:05