Turbo Monorepo配置web包依赖database导出的drizzle-orm
配置Monorepo让web包复用database包导出的drizzle-orm
核心思路
通过包管理器的依赖重定向和TypeScript路径映射,让@auth/drizzle-adapter在web包中自动使用@repo/database导出的drizzle-orm,无需在web包单独安装依赖。
步骤1:确保database包正确导出drizzle-orm
在packages/database/src/index.ts中导出drizzle-orm的所有内容,同时保留你的数据库实例等业务代码:
// packages/database/src/index.ts export * from 'drizzle-orm'; // 导出你的数据库实例 export { db } from './db';
同时完善packages/database/package.json的入口配置,确保包能被正确识别:
{ "name": "@repo/database", "main": "./dist/index.js", "types": "./dist/index.d.ts", "exports": { ".": "./dist/index.js", "./src": "./src/index.ts" } }
步骤2:根目录配置包管理器依赖重定向
根据你使用的包管理器,在根package.json中添加重定向规则,强制所有包(包括@auth/drizzle-adapter)使用@repo/database作为drizzle-orm的来源:
若使用pnpm:
{ "pnpm": { "overrides": { "drizzle-orm@*": "workspace:@repo/database" } } }
若使用npm:
{ "overrides": { "drizzle-orm": "file:./packages/database" } }
若使用yarn:
{ "resolutions": { "drizzle-orm": "workspace:@repo/database" } }
注意:确保根
package.json的workspaces字段已包含所有子包:{ "workspaces": [ "apps/*", "packages/*" ] }
步骤3:配置TypeScript路径映射
为了让TypeScript正确解析drizzle-orm的类型,在web包或根目录的tsconfig.json中添加路径映射:
方式1:web包单独配置(apps/web/tsconfig.json)
{ "compilerOptions": { "paths": { "drizzle-orm": ["../../packages/database/src"] } } }
方式2:根目录全局配置(tsconfig.json)
{ "compilerOptions": { "paths": { "drizzle-orm": ["./packages/database/src"] } }, "include": ["apps/**/*", "packages/**/*"] }
步骤4:验证配置
在web包中直接使用@auth/drizzle-adapter,无需安装drizzle-orm:
// apps/web/src/auth.ts import { DrizzleAdapter } from '@auth/drizzle-adapter'; import { db } from '@repo/database'; // 此处DrizzleAdapter会自动使用@repo/database导出的drizzle-orm export const adapter = DrizzleAdapter(db);
执行依赖安装命令(pnpm install/npm install/yarn install)后,启动web项目验证功能是否正常。
内容的提问来源于stack exchange,提问作者nehalist
相关产品推荐
相关产品推荐

