2025-01-16
温故知新
00

目录

1. 引用了 prisma 提供的枚举类型
解决办法:
2. prisma 构建问题(开发环境)
3. prisma 构建问题(生产环境)
总结
解决的思路整理

最近使用 Nuxt3+prisma 搭建开发全站应用时,打包后访问Web页面一直报错:

console
Uncaught TypeError: Failed to resolve module specifier ".prisma/client/index-browser". Relative references must start with either "/", "./", or "../".

看的人时一愣一愣的,通过搜索可以发现,该问题还是很常见的,在 prisma 官方仓库有很多关于该问题的反馈和讨论,总结一下讨论比较多的导致出现问题的原因及解决办法:

1. 引用了 prisma 提供的枚举类型

如:issue-4444 中的回复,有兴趣可自行点击查看。

解决办法:

去掉所有引用了 prisma 枚举类型数据的代码!

老狗遇到的不是这个问题,且没有引用任何枚举类型,所以不确定是否真的如讨论所说,请自行验证。

2. prisma 构建问题(开发环境)

有用户评论指导说到:将 .prisma 下的一些文件移动到 @prisma 中可以解决该问题,并贴出脚本如下:

json
// 放到 package.json 中,用于快速运行。 "prisma:inline": "cp ./node_modules/.prisma/client/*.js ./node_modules/@prisma/client", "prisma:migrate": "prisma migrate deploy && npm run prisma:inline", "prisma:migrate:dev": "prisma migrate dev && npm run prisma:inline", "prisma:generate": "prisma generate && npm run prisma:inline"

老狗遇到的也不是这个问题,起初以为是这个问题,但经过修改测试后,发现并没有解决,因此老狗认为,这个用户提到的解决办法是在开发环境时出现的问题,而我是在打包后运行时出现的问题。

3. prisma 构建问题(生产环境)

详情可前往阅读上下文:https://github.com/prisma/prisma/issues/12504#issuecomment-2505171223

通过内容可知,配置一个别名可以解决该问题:

ts
import { defineNuxtConfig } from 'nuxt' export default defineNuxtConfig({ modules: [ '@prisma/nuxt', ], ...其他配置 // nuxt3架构,可以在nuxt.config.ts文件中使用如下配置解决 // additional config vite: { resolve: { alias: { '.prisma/client/index-browser': './node_modules/.prisma/client/index-browser.js', }, }, }, })

总结

通过一翻搜集资料和解决,结合问题的描述,老狗对该问题有以下猜想:

  1. prisma 打包后,引用 index-browser.js 文件时,使用的是相对 .prisma 为开头的路径;
  2. 且默认认为 .prisma 文件夹应该在主进程的根目录;

然而这两个相对写死的配置,都是错误的!

  1. 使用 .prisma 作为引用路径开头,与 vite 规范(也有可能是其他规范)不符,规范规定路径开头应该是 .//../ 这类路径开头;
  2. nuxt3 中,实际打包后的 .prisma 文件夹是在 node_modules 内部!

解决的思路整理

  1. Nuxt3 构建后,.prisma 的默认路径是 .output/server/node_modules/.prisma
  2. 而打包后我们的主进程是 .output/server/index.mjs
  3. 相对于主进程,默认的路径 .prisma/client/index-browser 显然少了一层 node_modules
  4. 为了加上这一层,并且解决路径规范问题,得到了上面提到的配置:
ts
vite: { resolve: { alias: { '.prisma/client/index-browser': './node_modules/.prisma/client/index-browser.js', }, }, },
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!