[{"data":1,"prerenderedAt":550},["ShallowReactive",2],{"page-/post/issues/prisma-index-browser-error":3,"surrounding-page":541},{"id":4,"title":5,"author":6,"body":7,"date":530,"description":13,"extension":531,"group":6,"lastmod":532,"meta":533,"navigation":247,"path":534,"rawbody":535,"seo":536,"showTitle":6,"stem":537,"tags":538,"versions":6,"__hash__":540},"content/post/issues/prisma-index-browser-error.md","nuxt + prisma 编译时报错",null,{"type":8,"value":9,"toc":528},"minimark",[10,14,85,100,111,122,130,135,448,460,521,524],[11,12,13],"p",{},"浏览器控制台报错：",[15,16,21],"pre",{"className":17,"code":18,"language":19,"meta":20,"style":20},"language-shell shiki shiki-themes github-light","Uncaught TypeError: Failed to resolve module specifier \".prisma/client/index-browser\". Relative references must start with either \"/\", \"./\", or \"../\".\n","shell","",[22,23,24],"code",{"__ignoreMap":20},[25,26,29,33,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82],"span",{"class":27,"line":28},"line",1,[25,30,32],{"class":31},"s7eDp","Uncaught",[25,34,36],{"class":35},"sYBdl"," TypeError:",[25,38,39],{"class":35}," Failed",[25,41,42],{"class":35}," to",[25,44,45],{"class":35}," resolve",[25,47,48],{"class":35}," module",[25,50,51],{"class":35}," specifier",[25,53,54],{"class":35}," \".prisma/client/index-browser\".",[25,56,57],{"class":35}," Relative",[25,59,60],{"class":35}," references",[25,62,63],{"class":35}," must",[25,65,66],{"class":35}," start",[25,68,69],{"class":35}," with",[25,71,72],{"class":35}," either",[25,74,75],{"class":35}," \"/\",",[25,77,78],{"class":35}," \"./\",",[25,80,81],{"class":35}," or",[25,83,84],{"class":35}," \"../\".\n",[11,86,87,88,91,92,95,96,99],{},"同时页面某些功能异常，比如的 ",[22,89,90],{},"primevue"," 的 ",[22,93,94],{},"Button"," 组件 ",[22,97,98],{},"as=\"a\""," 属性失效，某些点击事件也失效。",[11,101,102,103,106,107,110],{},"不过这是我的问题，因为我设置了 ",[22,104,105],{},"nitro.prerender.failOnError: false","  导致我忽略了很多错误信息。直到加入了 ",[22,108,109],{},"prisma"," 之后才暴漏出来",[11,112,113,114,121],{},"关于这个问题，",[115,116,120],"a",{"href":117,"rel":118},"https://www.prisma.io/docs/orm/more/help-and-troubleshooting/prisma-nuxt-module#resolving-typeerror-failed-to-resolve-module-specifier-prismaclientindex-browser",[119],"nofollow","Prisma 官方文档","上有提到，但给出的不是最终解决方案",[11,123,124,125],{},"对于 pnpm 来说可以参考这个",[115,126,129],{"href":127,"rel":128},"https://github.com/prisma/prisma/issues/12504#issuecomment-1827097530",[119],"回答",[11,131,132],{},[22,133,134],{},"nuxt.config.ts",[15,136,140],{"className":137,"code":138,"language":139,"meta":20,"style":20},"language-typescript shiki shiki-themes github-light","import { createRequire } from 'module'\nimport { defineConfig } from 'vite'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n// @ts-ignore\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nconst { resolve } = createRequire(import.meta.url)\n\nconst prismaClient = `prisma${path.sep}client`\n\nconst prismaClientIndexBrowser = resolve('@prisma/client/index-browser').replace(`@${prismaClient}`, `.${prismaClient}`)\n\nexport default defineNuxtConfig({\n\nvite: {\n    resolve: {\n      alias: {\n        \".prisma/client/index-browser\": path.relative(__dirname, prismaClientIndexBrowser)\n      }\n    }\n}\n\n})\n","typescript",[22,141,142,158,171,184,197,204,242,249,280,285,309,314,361,366,381,386,392,398,404,419,425,431,437,442],{"__ignoreMap":20},[25,143,144,148,152,155],{"class":27,"line":28},[25,145,147],{"class":146},"sD7c4","import",[25,149,151],{"class":150},"sgsFI"," { createRequire } ",[25,153,154],{"class":146},"from",[25,156,157],{"class":35}," 'module'\n",[25,159,161,163,166,168],{"class":27,"line":160},2,[25,162,147],{"class":146},[25,164,165],{"class":150}," { defineConfig } ",[25,167,154],{"class":146},[25,169,170],{"class":35}," 'vite'\n",[25,172,174,176,179,181],{"class":27,"line":173},3,[25,175,147],{"class":146},[25,177,178],{"class":150}," path ",[25,180,154],{"class":146},[25,182,183],{"class":35}," 'node:path'\n",[25,185,187,189,192,194],{"class":27,"line":186},4,[25,188,147],{"class":146},[25,190,191],{"class":150}," { fileURLToPath } ",[25,193,154],{"class":146},[25,195,196],{"class":35}," 'node:url'\n",[25,198,200],{"class":27,"line":199},5,[25,201,203],{"class":202},"sAwPA","// @ts-ignore\n",[25,205,207,210,214,217,220,223,226,229,231,233,236,239],{"class":27,"line":206},6,[25,208,209],{"class":146},"const",[25,211,213],{"class":212},"sYu0t"," __dirname",[25,215,216],{"class":146}," =",[25,218,219],{"class":150}," path.",[25,221,222],{"class":31},"dirname",[25,224,225],{"class":150},"(",[25,227,228],{"class":31},"fileURLToPath",[25,230,225],{"class":150},[25,232,147],{"class":146},[25,234,235],{"class":150},".",[25,237,238],{"class":212},"meta",[25,240,241],{"class":150},".url))\n",[25,243,245],{"class":27,"line":244},7,[25,246,248],{"emptyLinePlaceholder":247},true,"\n",[25,250,252,254,257,260,263,266,269,271,273,275,277],{"class":27,"line":251},8,[25,253,209],{"class":146},[25,255,256],{"class":150}," { ",[25,258,259],{"class":212},"resolve",[25,261,262],{"class":150}," } ",[25,264,265],{"class":146},"=",[25,267,268],{"class":31}," createRequire",[25,270,225],{"class":150},[25,272,147],{"class":146},[25,274,235],{"class":150},[25,276,238],{"class":212},[25,278,279],{"class":150},".url)\n",[25,281,283],{"class":27,"line":282},9,[25,284,248],{"emptyLinePlaceholder":247},[25,286,288,290,293,295,298,301,303,306],{"class":27,"line":287},10,[25,289,209],{"class":146},[25,291,292],{"class":212}," prismaClient",[25,294,216],{"class":146},[25,296,297],{"class":35}," `prisma${",[25,299,300],{"class":150},"path",[25,302,235],{"class":35},[25,304,305],{"class":150},"sep",[25,307,308],{"class":35},"}client`\n",[25,310,312],{"class":27,"line":311},11,[25,313,248],{"emptyLinePlaceholder":247},[25,315,317,319,322,324,326,328,331,334,337,339,342,345,348,351,354,356,358],{"class":27,"line":316},12,[25,318,209],{"class":146},[25,320,321],{"class":212}," prismaClientIndexBrowser",[25,323,216],{"class":146},[25,325,45],{"class":31},[25,327,225],{"class":150},[25,329,330],{"class":35},"'@prisma/client/index-browser'",[25,332,333],{"class":150},").",[25,335,336],{"class":31},"replace",[25,338,225],{"class":150},[25,340,341],{"class":35},"`@${",[25,343,344],{"class":150},"prismaClient",[25,346,347],{"class":35},"}`",[25,349,350],{"class":150},", ",[25,352,353],{"class":35},"`.${",[25,355,344],{"class":150},[25,357,347],{"class":35},[25,359,360],{"class":150},")\n",[25,362,364],{"class":27,"line":363},13,[25,365,248],{"emptyLinePlaceholder":247},[25,367,369,372,375,378],{"class":27,"line":368},14,[25,370,371],{"class":146},"export",[25,373,374],{"class":146}," default",[25,376,377],{"class":31}," defineNuxtConfig",[25,379,380],{"class":150},"({\n",[25,382,384],{"class":27,"line":383},15,[25,385,248],{"emptyLinePlaceholder":247},[25,387,389],{"class":27,"line":388},16,[25,390,391],{"class":150},"vite: {\n",[25,393,395],{"class":27,"line":394},17,[25,396,397],{"class":150},"    resolve: {\n",[25,399,401],{"class":27,"line":400},18,[25,402,403],{"class":150},"      alias: {\n",[25,405,407,410,413,416],{"class":27,"line":406},19,[25,408,409],{"class":35},"        \".prisma/client/index-browser\"",[25,411,412],{"class":150},": path.",[25,414,415],{"class":31},"relative",[25,417,418],{"class":150},"(__dirname, prismaClientIndexBrowser)\n",[25,420,422],{"class":27,"line":421},20,[25,423,424],{"class":150},"      }\n",[25,426,428],{"class":27,"line":427},21,[25,429,430],{"class":150},"    }\n",[25,432,434],{"class":27,"line":433},22,[25,435,436],{"class":150},"}\n",[25,438,440],{"class":27,"line":439},23,[25,441,248],{"emptyLinePlaceholder":247},[25,443,445],{"class":27,"line":444},24,[25,446,447],{"class":150},"})\n",[11,449,450,451,454,455,459],{},"对于 ",[22,452,453],{},"npm"," 来说，可以参考这个",[115,456,129],{"href":457,"rel":458},"https://github.com/prisma/prisma/issues/12504#issuecomment-1285883083",[119],"，（我没试）",[15,461,463],{"className":137,"code":462,"language":139,"meta":20,"style":20},"export default defineNuxtConfig({\n\nvite: {\n    resolve: {\n      alias: {\n        \".prisma/client/index-browser\": \"./node_modules/.prisma/client/index-browser.js\"\n      }\n    }\n}\n\n})\n",[22,464,465,475,479,483,487,491,501,505,509,513,517],{"__ignoreMap":20},[25,466,467,469,471,473],{"class":27,"line":28},[25,468,371],{"class":146},[25,470,374],{"class":146},[25,472,377],{"class":31},[25,474,380],{"class":150},[25,476,477],{"class":27,"line":160},[25,478,248],{"emptyLinePlaceholder":247},[25,480,481],{"class":27,"line":173},[25,482,391],{"class":150},[25,484,485],{"class":27,"line":186},[25,486,397],{"class":150},[25,488,489],{"class":27,"line":199},[25,490,403],{"class":150},[25,492,493,495,498],{"class":27,"line":206},[25,494,409],{"class":35},[25,496,497],{"class":150},": ",[25,499,500],{"class":35},"\"./node_modules/.prisma/client/index-browser.js\"\n",[25,502,503],{"class":27,"line":244},[25,504,424],{"class":150},[25,506,507],{"class":27,"line":251},[25,508,430],{"class":150},[25,510,511],{"class":27,"line":282},[25,512,436],{"class":150},[25,514,515],{"class":27,"line":287},[25,516,248],{"emptyLinePlaceholder":247},[25,518,519],{"class":27,"line":311},[25,520,447],{"class":150},[11,522,523],{},"而这个问题，是 2022 年就存在的，今年已经是 2025 年😀",[525,526,527],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":20,"searchDepth":160,"depth":160,"links":529},[],"2025-02-28T00:00:00.000Z","md","2025-08-19T00:00:00.000Z",{},"/post/issues/prisma-index-browser-error","---\ntitle: nuxt + prisma 编译时报错\ndate: 2025-02-28\nlastmod: 2025-08-19\ntags: [\"issue\"]\n\n---\n浏览器控制台报错：\n\n```shell\nUncaught TypeError: Failed to resolve module specifier \".prisma/client/index-browser\". Relative references must start with either \"/\", \"./\", or \"../\".\n```\n\n同时页面某些功能异常，比如的 `primevue` 的 `Button` 组件 `as=\"a\"` 属性失效，某些点击事件也失效。\n\n不过这是我的问题，因为我设置了 `nitro.prerender.failOnError: false`  导致我忽略了很多错误信息。直到加入了 `prisma` 之后才暴漏出来\n\n关于这个问题，[Prisma 官方文档](https://www.prisma.io/docs/orm/more/help-and-troubleshooting/prisma-nuxt-module#resolving-typeerror-failed-to-resolve-module-specifier-prismaclientindex-browser)上有提到，但给出的不是最终解决方案\n\n对于 pnpm 来说可以参考这个[回答](https://github.com/prisma/prisma/issues/12504#issuecomment-1827097530)\n\n`nuxt.config.ts`\n\n```typescript\nimport { createRequire } from 'module'\nimport { defineConfig } from 'vite'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n// @ts-ignore\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nconst { resolve } = createRequire(import.meta.url)\n\nconst prismaClient = `prisma${path.sep}client`\n\nconst prismaClientIndexBrowser = resolve('@prisma/client/index-browser').replace(`@${prismaClient}`, `.${prismaClient}`)\n\nexport default defineNuxtConfig({\n\nvite: {\n\tresolve: {\n      alias: {\n        \".prisma/client/index-browser\": path.relative(__dirname, prismaClientIndexBrowser)\n      }\n    }\n}\n\n})\n```\n\n对于 `npm` 来说，可以参考这个[回答](https://github.com/prisma/prisma/issues/12504#issuecomment-1285883083)，（我没试）\n\n```typescript\nexport default defineNuxtConfig({\n\nvite: {\n\tresolve: {\n      alias: {\n        \".prisma/client/index-browser\": \"./node_modules/.prisma/client/index-browser.js\"\n      }\n    }\n}\n\n})\n```\n\n而这个问题，是 2022 年就存在的，今年已经是 2025 年😀\n\n\n",{"title":5,"description":13},"post/issues/prisma-index-browser-error",[539],"issue","sPFNMhE1fG6F2hroZ2au11bYsqxQ9ligtTPwLR5fz3U",[542,546],{"title":543,"path":544,"stem":545},"OpenClaw 安装入门（Windows）","/post/zzao/openclaw/openclaw-install-windows","post/zzao/openclaw/openclaw-install-windows",{"title":547,"path":548,"stem":549},"假设你是AI，你的Skill应该是什么样的","/post/zzao/ai-skill-structure","post/zzao/ai-skill-structure",1779005086072]