最近使用 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 许可协议。转载请注明出处!