如何在多项目间共享Prisma类型与枚举而不提取完整客户端?
仅共享Prisma类型与枚举的解决方案
完全可以只提取Prisma生成的类型和枚举作为独立npm包共享,无需引入完整的Prisma客户端。以下是具体实现步骤:
1. 初始化类型专属npm包
- 创建新目录并初始化npm项目:
mkdir prisma-shared-types && cd prisma-shared-types npm init -y - 安装开发依赖(仅用于生成类型,生产环境不会包含):
npm install prisma @prisma/client --save-dev
2. 同步Prisma Schema
将主API项目中的prisma/schema.prisma文件复制到当前包的prisma目录下。如果主项目的Schema是模块化的,也可以通过Prisma的import语法直接引用主项目的Schema文件,避免重复复制。
3. 生成Prisma类型
运行Prisma生成命令,生成客户端类型文件:
npx prisma generate
4. 导出需要共享的类型与枚举
在src/index.ts中定义并导出需要共享的类型和枚举:
import { Prisma, EnumXY } from "@prisma/client"; // 定义并导出筛选后的模型类型 export const minimalModelXYSelect = Prisma.validator<Prisma.ModelXYSelect>()({ id: true, name: true }); export type MinimalModelXY = Prisma.ModelXYGetPayload<{ select: typeof minimalModelXYSelect; }>; // 直接导出枚举 export { EnumXY };
5. 配置TypeScript编译
创建tsconfig.json,确保编译后生成类型声明文件:
{ "compilerOptions": { "target": "ESNext", "module": "ESNext", "declaration": true, "outDir": "./dist", "strict": true, "esModuleInterop": true, "skipLibCheck": true }, "include": ["src/**/*"], "exclude": ["node_modules"] }
6. 打包并发布
- 在
package.json中添加编译脚本:"scripts": { "build": "tsc" } - 执行编译生成dist目录:
npm run build - 配置package.json的入口字段,确保其他项目能正确识别类型:
"main": "dist/index.js", "types": "dist/index.d.ts", "files": ["dist/**/*"] - 最后将包发布到npm私有仓库或通过
npm link在本地项目间共享。
注意事项
- 当主项目的Schema更新时,需要同步更新类型包的Schema,重新生成并发布新版本,确保所有依赖项目的类型一致性。
- 该包仅包含类型声明和枚举,不会引入Prisma客户端的运行时代码,不会增加依赖项目的体积。
内容的提问来源于stack exchange,提问作者Schmella
相关产品推荐
相关产品推荐

