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

如何在多项目间共享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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 02:45:38