在Turborepo中从prisma包导入Prisma Client到Express服务器时遭遇模块未找到错误的求助
在Turborepo中从prisma包导入Prisma Client到Express服务器时遭遇模块未找到错误的求助
兄弟我之前在Turborepo里跨包导入Prisma Client也踩过一模一样的坑!折腾了好一阵才搞定,给你分享几个亲测有用的解决步骤:
1. 先把Prisma包的配置捋顺
首先得确保你的turborepo/packages/prisma包里的package.json配置对路,不然Turborepo根本找不到要导的模块:
- 一定要加
main、types和exports字段,指定模块的入口文件:"main": "./index.js", "types": "./index.d.ts", "exports": { ".": "./index.js" } - 别忘了在prisma包目录下运行
prisma generate生成Client文件,而且要把生成的文件加到package.json的files字段里,确保本地链接时能包含这些文件:"files": [ "index.js", "index.d.ts", "node_modules/.prisma/client" ]
2. 给Express服务器配置本地依赖关联
在你的apps/http-server的package.json里,必须把prisma包作为本地工作区依赖添加,不能用相对路径硬导:
"dependencies": { "@your-org/prisma": "workspace:*" }
然后回到项目根目录,运行你常用的包管理器命令(npm install/pnpm install/yarn),让Turborepo把本地包正确链接起来。
3. 检查TypeScript配置(如果用TS的话)
要是你用TypeScript写的Express服务器,TS的配置很容易出问题:
- 确保
apps/http-server/tsconfig.json的compilerOptions里有正确的路径解析配置,比如:"compilerOptions": { "baseUrl": ".", "paths": { "@your-org/prisma": ["../../packages/prisma/src"] }, "moduleResolution": "node16" // 这里要和你项目的模块系统匹配,比如nodenext } - 同时prisma包的
tsconfig.json要开declaration: true,这样才能生成类型声明文件,避免TS报“找不到类型定义”的错误。
4. 确认导入路径正确
在你的Express服务器代码里,导入的时候要用你在package.json里定义的包名,别用相对路径:
// 正确的写法 import { PrismaClient } from '@your-org/prisma'; // 如果是CommonJS的话 const { PrismaClient } = require('@your-org/prisma');
5. 清理缓存重新构建
Turborepo的缓存有时候会抽风,导致修改不生效,这时候可以:
- 运行
turbo clean清理所有缓存 - 再运行
turbo run build重新构建所有包 - 最后启动你的Express服务器试试看
我当时就是因为没把Prisma Client的生成文件加到files字段里,导致本地链接的时候没把Client文件同步过去,折腾了好久才发现!你可以一个个排查这些点,应该能解决问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

