运行drizzle-kit generate:pg遇模块导入语法错误求助
解决Drizzle生成PostgreSQL迁移文件的模块语法错误
问题根源
这个报错是因为Node.js把Drizzle ORM的ESM模块文件当成CommonJS模块加载了,导致import语句不被识别。说白了就是项目用的CommonJS模块系统,和Drizzle现在优先用ESM的模式冲突了。
两种解决办法
办法1:把项目改成ESM模式
- 打开
package.json,添加一行"type": "module":
{ "name": "streaming-platform", "version": "0.0.1", "type": "module", // 新增这行 "description": "", // 其他原有配置保持不变 }
- 调整
tsconfig.json(没有的话就新建一个),适配ESM规范:
{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "moduleResolution": "NodeNext", "esModuleInterop": true, "skipLibCheck": true, "strict": true, "outDir": "./dist" }, "include": ["src/**/*"], "exclude": ["node_modules"] }
- 更新
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模式,可以试试以下操作:
- 把
drizzle.config.json改名为drizzle.config.cjs,改用CommonJS语法编写:
module.exports = { out: "./migrations", schema: "./src/db/schema.ts", breakpoints: false };
- 检查
tsconfig.json,确保核心配置正确:
{ "compilerOptions": { "module": "CommonJS", "esModuleInterop": true, // 其他原有配置保持不变 } }
- 执行迁移命令时显式指定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
相关产品推荐
相关产品推荐

