midway icon indicating copy to clipboard operation
midway copied to clipboard

项目依赖 prisma的时候 build 报错

Open Yuliang-Lee opened this issue 3 years ago • 6 comments

  • Node Version: 16.13.0
  • Egg Version: 2.32
  • Plugin Name:
  • Plugin Version:
  • Platform: macos
  • Mini Showcase Repository:

项目使用了 prisma,执行 npm run build 的时候报错

image

Yuliang-Lee avatar Nov 29 '21 07:11 Yuliang-Lee

Prisma 的 Client 不应该生成在 src 下,看看 prisma.schema 里是否手动指定了生成文件位置

Lxxyx avatar Nov 29 '21 07:11 Lxxyx

https://github.com/midwayjs/midway-examples/blob/master/v2/demo-prisma/src/prisma/schema.prisma demo 项目也是指定生成在 src 里。 现在我在 tsconfig 里 exclude 掉 client 的目录 build 不会报错,但是系统运行的时候会报找不到 client 文件,我看是因为 dist 里面只 copy 了 prisma/client/esm 目录的内容,而没有 copy prisma/client/xxx.js 这一层的 js 文件,这是为什么?

Yuliang-Lee avatar Nov 29 '21 07:11 Yuliang-Lee

midwayjs/midway-examples@master/v2/demo-prisma/src/prisma/schema.prisma demo 项目也是指定生成在 src 里。 现在我在 tsconfig 里 exclude 掉 client 的目录 build 不会报错,但是系统运行的时候会报找不到 client 文件,我看是因为 dist 里面只 copy 了 prisma/client/esm 目录的内容,而没有 copy prisma/client/xxx.js 这一层的 js 文件,这是为什么?

可以移除掉这个 output,这个 client 应该是 primsa 默认生成到 node_modules 的

Lxxyx avatar Nov 29 '21 08:11 Lxxyx

image

Yuliang-Lee avatar Nov 29 '21 08:11 Yuliang-Lee

现在因为涉及要访问多个 db 实例,需要我们指定 client 生成的目录

Yuliang-Lee avatar Nov 29 '21 08:11 Yuliang-Lee

说下目前我们的解决方案,在 midway-bin build -c 命令后加 --include 参数把 prisma 生成的 js 文件 copy 到打包后的目录中 ,从官方支持的途径满足需求,只能在命令行后加参数这种方式,根据代码 https://github.com/midwayjs/cli/blob/master/packages/cli-plugin-build/src/index.ts#L138 ,在 package.json 里添加 midway-bin-build 配置的方式行不通

Yuliang-Lee avatar Nov 29 '21 13:11 Yuliang-Lee