Lerna Monorepo中Rollup打包Prisma Client的问题求助
解决Lerna Monorepo中Prisma Client打包问题的步骤
1. 为每个模块配置独立的Prisma Client输出路径
在Module A和Module B各自的prisma/schema.prisma文件中,修改generator配置,指定客户端生成到模块内部目录,避免共享node_modules冲突:
generator client { provider = "prisma-client-js" output = "../src/generated/prisma-client" // 路径可自定义,确保在模块内部 }
执行每个模块的生成命令:
# 在Module A目录下 npx prisma generate # 在Module B目录下 npx prisma generate
2. 配置Rollup打包规则,完整包含Prisma Client依赖
Rollup默认不会打包非入口文件的依赖,需要添加插件处理Prisma的runtime文件和类型:
- 安装必要插件:
npm install @rollup/plugin-node-resolve @rollup/plugin-commonjs rollup-plugin-copy rollup-plugin-typescript2 --save-dev
- 修改Rollup配置文件(
rollup.config.js):
import resolve from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; import copy from 'rollup-plugin-copy'; import typescript from 'rollup-plugin-typescript2'; export default { input: 'src/index.ts', output: { dir: 'dist', format: 'esm', // 或其他你需要的格式 preserveModules: true, // 保持模块结构,避免路径混乱 }, plugins: [ resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json', useTsconfigDeclarationDir: true, // 输出类型到tsconfig指定的declarationDir }), copy({ targets: [ // 复制runtime文件夹到打包目录 { src: 'src/generated/prisma-client/runtime', dest: 'dist/generated/prisma-client', }, // 复制所有类型文件 { src: 'src/generated/prisma-client/*.d.ts', dest: 'dist/generated/prisma-client', }, // 复制Prisma的引擎文件(如果有) { src: 'src/generated/prisma-client/*.node', dest: 'dist/generated/prisma-client', }, ], }), ], };
3. 调整TypeScript配置,确保类型解析正常
在Module A和B的tsconfig.json中,添加生成的Prisma Client目录到include列表,并配置类型输出:
{ "compilerOptions": { "declaration": true, "declarationDir": "./dist/types", // 类型输出目录 "rootDir": "./src" }, "include": ["src/**/*", "src/generated/prisma-client/**/*"], "exclude": ["node_modules"] }
4. 调整模块导出与Lerna脚本
- 在Module A和B的
src/index.ts中,导出各自的Prisma Client:
// Module A index.ts export * from './generated/prisma-client'; // Module B index.ts export * from './generated/prisma-client';
- 在Lerna根目录的
package.json中,添加预打包脚本,确保先生成所有模块的Prisma Client:
{ "scripts": { "prebuild": "lerna run prisma:generate", "build": "lerna run build" } }
每个模块的package.json中添加生成命令:
{ "scripts": { "prisma:generate": "prisma generate", "build": "rollup -c" } }
5. 验证打包结果
执行根目录的build命令后,检查每个模块的dist目录:
- 确认
dist/generated/prisma-client下包含index.js、runtime文件夹、所有.d.ts文件和引擎文件 - 在Module C中导入测试,确认类型提示正常,运行时无缺失文件错误
内容的提问来源于stack exchange,提问作者Quadear
相关产品推荐
相关产品推荐

