将 Prisma 与 Yarn v3 结合使用

Hen*_* VT 1 next.js prisma next-auth

我正在使用 Next.js、Next-Auth 和 Prisma 构建一个应用程序。我正在使用 API 路由作为后端代码。最近,我将电脑上的 Yarn 升级到了v3.1.1. 然后,我创建了一个.yarnrc.yml文件并设置了避免将此项目转换为 PnP 的nodeLinker选项。 当我运行开发服务器来处理我的应用程序时,当它尝试编译下一个身份验证 API 路由时,我遇到了此错误。更奇怪的是,通过 Vercel 部署时不会出现此问题;功能日志很好,并且按预期工作。"node-modules"

Error: ENOENT: no such file or directory, open 'C:\Users\htech\Desktop\code\consulting\.yarn\unplugged\@prisma-client-virtual-d7adb716b6\node_modules\.prisma\client\schema.prisma'
Run Code Online (Sandbox Code Playgroud)

当我搜索类似问题时,通常出现的解决方案是在schema.prisma. 当我添加自定义输出路径并相应更新导入时,它只会抛出一些深奥的内部依赖错误。

error - ./prisma/generated/runtime/index.js:27652:17
Module not found: Can't resolve '_http_common'
  27650 |   "../../node_modules/.pnpm/undici@3.3.6/node_modules/undici/lib/node/http-parser.js"(exports2, module2) {
  27651 |     "use strict";
> 27652 |     var common = require("_http_common");
Run Code Online (Sandbox Code Playgroud)

环境

  • yarn:v3.1.1
  • next:v12.1.0
  • @prisma/client:v3.10.0
  • prisma:v3.10.0
  • next-auth:v4.2.1

这似乎是一个简单的问题,即它的生成位置。但是,我不知道如何解决这个问题,除非回滚我的系统范围的纱线版本。我遇到错误了吗?有没有人有办法解决吗?

Hen*_* VT 5

在测试了许多不同的东西之后,我相信我已经找到了解决方案。

问题

问题在于 Yarn 如何解决导入问题。Prisma CLI 生成客户端(默认情况下)到node_modules/.prisma. 即使nodeLinker设置为node-modules,Yarn 也会尝试将此导入解析为.yarn/unplugged/<folder-name>,其中生成的客户端不存在。

解决方案

为了解决此分辨率问题,我们必须为.prisma文件夹创建自定义分辨率。这假设您没有自定义输出路径。

# .yarnrc.yml

nodeLinker: node-modules

packageExtensions:
  "@prisma/client@*":
    dependencies:
      ".prisma": 'link:See "resolution" field of package.json'
Run Code Online (Sandbox Code Playgroud)
# package.json

{
  ...
  "resolutions": {
     ".prisma": "link:node-modules/.prisma"
  }
}
Run Code Online (Sandbox Code Playgroud)

归功于 Github 上的该用户