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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:33:25