drizzle.config.ts 的用途是什么?

问题描述 投票:0回答:1

我一直在为我的无服务器后端设置一个使用 Drizzle + Next.js + Vercel 的项目。 我想使用 Drizzle 的 ORM api,因此我像这样引用我的数据库:

import { drizzle } from "drizzle-orm/vercel-postgres";
import { sql } from "@vercel/postgres";
import { users } from "./schema";
import * as schema from "./schema";

export const db = drizzle(sql, { schema });

我注意到您需要传递 {schema} 作为参数来推断打字稿的类型并使用您在模式中定义的 ORM 关系。

但后来我注意到 drizzle-kit 提供了一个 drizzle.config.ts 文件,它也引用了您的架构,如下所示:

import "@/lib/config";
import { defineConfig } from "drizzle-kit";

export default defineConfig({
  schema: "./lib/schema.ts",
  out: "./drizzle",
  driver: "pg",
  dbCredentials: {
    connectionString: process.env.POSTGRES_URL,
  },
  verbose: true,
  strict: true,
});

很自然地,我认为我不需要“drizzle(sql, { schema });”的第二个可选部分如果我使用 drizzle-kit 但情况似乎并非如此。

Drizzle 文档指定:

Drizzle Kit lets you split your schema in different files and even have multiple schemas for different databases in one project. You can rapidly prototype database schema and push it directly to the database.

那么为什么我需要重新定义我的架构位置两次?我的 drizzle.config.ts 文件的用途是什么?

非常感谢

我尝试将配置对象直接传递给 drizzle,如下所示:

import { sql } from "@vercel/postgres";
import { drizzle } from "drizzle-orm/vercel-postgres";
import {config} from "@/drizzle.config";

// import dotenv from 'dotenv'
// dotenv.config({ path: '.env.local' })

// use dotenv or this custom next js script to load .env.local variables in process.env for Node.js backend
import { loadEnvConfig } from "@next/env";

const projectDir = process.cwd();
loadEnvConfig(projectDir);

export const db = drizzle(sql, config);

或者像这样:

import { sql } from "@vercel/postgres";
import { drizzle } from "drizzle-orm/vercel-postgres";
import {config} from "@/drizzle.config";

// import dotenv from 'dotenv'
// dotenv.config({ path: '.env.local' })

// use dotenv or this custom next js script to load .env.local variables in process.env for Node.js backend
import { loadEnvConfig } from "@next/env";

const projectDir = process.cwd();
loadEnvConfig(projectDir);

export const db = drizzle(sql, {schema: config.schema});

但这没有用

javascript next.js configuration vercel drizzle
1个回答
0
投票

我认为 drizzle 以前要求您在

schema
对象中预先定义所有表格,但现在似乎不需要这样做。 入门文档没有引用它。我刚刚删除了
drizzle
的第二个参数,并且我仍然在查询中获得类型安全。不过,我不使用 drizzle 的relations功能,所以我不能谈论这一点。

旁注:在将所有表导入到单个架构对象中时,我遇到了很多循环依赖问题,因此我建议根据我的经验将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.