最近使用 Nuxt3+prisma
搭建开发全站应用时,打包后访问Web页面一直报错:
consoleUncaught TypeError: Failed to resolve module specifier ".prisma/client/index-browser". Relative references must start with either "/", "./", or "../".
看的人时一愣一愣的,通过搜索可以发现,该问题还是很常见的,在 prisma
官方仓库有很多关于该问题的反馈和讨论,总结一下讨论比较多的导致出现问题的原因及解决办法:
prisma
提供的枚举类型如:issue-4444 中的回复,有兴趣可自行点击查看。
去掉所有引用了 prisma
枚举类型数据的代码!
老狗遇到的不是这个问题,且没有引用任何枚举类型,所以不确定是否真的如讨论所说,请自行验证。
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"
老狗遇到的也不是这个问题,起初以为是这个问题,但经过修改测试后,发现并没有解决,因此老狗认为,这个用户提到的解决办法是在开发环境时出现的问题,而我是在打包后运行时出现的问题。
prisma
构建问题(生产环境)详情可前往阅读上下文:https://github.com/prisma/prisma/issues/12504#issuecomment-2505171223
通过内容可知,配置一个别名可以解决该问题:
tsimport { 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',
},
},
},
})
通过一翻搜集资料和解决,结合问题的描述,老狗对该问题有以下猜想:
prisma
打包后,引用 index-browser.js
文件时,使用的是相对 .prisma
为开头的路径;.prisma
文件夹应该在主进程的根目录;然而这两个相对写死的配置,都是错误的!
.prisma
作为引用路径开头,与 vite
规范(也有可能是其他规范)不符,规范规定路径开头应该是 ./
、/
、../
这类路径开头;nuxt3
中,实际打包后的 .prisma
文件夹是在 node_modules
内部!Nuxt3
构建后,.prisma
的默认路径是 .output/server/node_modules/.prisma
;.output/server/index.mjs
;.prisma/client/index-browser
显然少了一层 node_modules
;ts vite: {
resolve: {
alias: {
'.prisma/client/index-browser': './node_modules/.prisma/client/index-browser.js',
},
},
},
本文作者:DingDangDog
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!