将 Prisma 与 Yarn v3 结合使用
Using Prisma with Yarn v3
我正在使用 Next.js、Next-Auth 和 Prisma 构建应用程序。我正在为后端代码使用 API 路由。最近,我将电脑上的 Yarn 升级到 v3.1.1
。然后我创建了一个 .yarnrc.yml
文件并将 nodeLinker
选项设置为 "node-modules"
以避免将此项目转换为 PnP。
当我 运行 开发服务器在我的应用程序上工作时,我 运行 进入这个错误,因为它试图编译 next-auth API 路由。更奇怪的是,通过 Vercel 部署时不会出现此问题;功能日志很好,按预期工作。
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'
当我搜索类似问题时,出现的通常解决方案是在 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");
环境
yarn
:v3.1.1
next
: v12.1.0
@prisma/client
:v3.10.0
prisma
:v3.10.0
next-auth
:v4.2.1
这似乎是一个关于生成目标的简单问题。但是,除了回滚系统范围的 yarn 版本之外,我不知道如何解决这个问题。我 运行 有问题吗?有人有解决办法吗?
在测试了许多不同的东西之后,我相信我找到了解决方案。
问题
问题在于 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'
# package.json
{
...
"resolutions": {
".prisma": "link:node-modules/.prisma"
}
}
我正在使用 Next.js、Next-Auth 和 Prisma 构建应用程序。我正在为后端代码使用 API 路由。最近,我将电脑上的 Yarn 升级到 v3.1.1
。然后我创建了一个 .yarnrc.yml
文件并将 nodeLinker
选项设置为 "node-modules"
以避免将此项目转换为 PnP。
当我 运行 开发服务器在我的应用程序上工作时,我 运行 进入这个错误,因为它试图编译 next-auth API 路由。更奇怪的是,通过 Vercel 部署时不会出现此问题;功能日志很好,按预期工作。
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'
当我搜索类似问题时,出现的通常解决方案是在 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");
环境
yarn
:v3.1.1
next
:v12.1.0
@prisma/client
:v3.10.0
prisma
:v3.10.0
next-auth
:v4.2.1
这似乎是一个关于生成目标的简单问题。但是,除了回滚系统范围的 yarn 版本之外,我不知道如何解决这个问题。我 运行 有问题吗?有人有解决办法吗?
在测试了许多不同的东西之后,我相信我找到了解决方案。
问题
问题在于 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'
# package.json
{
...
"resolutions": {
".prisma": "link:node-modules/.prisma"
}
}