midwayjs / midway

🍔 A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 🌈
https://www.midwayjs.org/
MIT License
7.4k stars 577 forks source link

项目依赖 prisma的时候 build 报错 #1391

Open Yuliang-Lee opened 2 years ago

Yuliang-Lee commented 2 years ago

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

image

Lxxyx commented 2 years ago

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

Yuliang-Lee commented 2 years ago

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 文件,这是为什么?

Lxxyx commented 2 years ago

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 的

Yuliang-Lee commented 2 years ago

image

Yuliang-Lee commented 2 years ago

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

Yuliang-Lee commented 2 years ago

说下目前我们的解决方案,在 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 配置的方式行不通