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

Next.js 14中Drizzle-Kit无法从.env加载数据库URL至drizzle.config.ts

在Next.js 14中让Drizzle-Kit读取.env数据库URL的解决方案

方案1:手动加载dotenv(推荐)

Drizzle-Kit作为独立CLI工具,不会自动加载Next.js的.env文件,我们可以通过dotenv包手动完成环境变量加载:

  1. 安装dotenv开发依赖:
npm install dotenv --save-dev
# 或使用yarn/pnpm
yarn add dotenv --dev
pnpm add dotenv -D
  1. 修改drizzle.config.ts,添加环境变量加载逻辑:
import { defineConfig } from "drizzle-kit";
import dotenv from "dotenv";

// 加载Next.js默认存放本地敏感变量的.env.local文件
// 若你的变量存于.env文件,将path改为".env"即可
dotenv.config({ path: ".env.local" });

export default defineConfig({
  schema: "./src/db/schema/**/*.ts", // 替换为你的schema文件实际路径
  out: "./drizzle", // 迁移文件输出目录
  dialect: "postgresql",
  dbCredentials: {
    url: process.env.DATABASE_URL!,
  },
});

方案优势

  • dotenv会将.env文件中的变量注入到process.env,Drizzle-Kit执行时可直接读取DATABASE_URL
  • 敏感信息仍存储在.env文件中,只要确保该文件已加入.gitignore(Next.js默认已配置),就不会被提交到Git仓库
  • 无需在多个位置维护凭证,保持单一数据源,避免冗余

方案2:通过CLI命令直接传入环境变量(适合临时场景)

如果不想额外安装依赖,可在执行Drizzle-Kit命令时直接传入环境变量:

# 命令行直接指定
DATABASE_URL="你的PostgreSQL链接" drizzle-kit push:pg

也可以将命令封装到package.json的scripts中,避免重复输入:

{
  "scripts": {
    "db:push": "DATABASE_URL=$(grep DATABASE_URL .env.local | cut -d '=' -f2) drizzle-kit push:pg"
  }
}

注意:该方法依赖grep、cut等Shell命令,在Windows系统的CMD或PowerShell中可能无法正常运行,更适合Linux/macOS环境。

额外注意事项

  • 部署环境:在Vercel、Netlify等平台部署时,直接在平台控制台配置DATABASE_URL环境变量即可,CI/CD流程中Drizzle-Kit会自动读取平台注入的环境变量,无需dotenv。
  • 安全校验:永远不要将包含敏感信息的.env文件提交到Git仓库,确保.gitignore中包含.env、.env.local等文件。
  • 类型安全:可使用zod等工具对process.env.DATABASE_URL进行格式验证,避免因变量缺失或格式错误导致的运行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:26