Next.js集成Prisma构建失败:Windows文件权限EPERM错误求助
Next.js + Prisma构建时Windows文件权限EPERM错误解决方案
问题描述
在Windows环境下使用Next.js(15.3.2)+ Prisma开发时,执行pnpm run build会触发**EPERM: operation not permitted, scandir 'C:\Users<用户名>\Application Data'**错误,即使注释掉所有Prisma查询操作、仅保留Prisma客户端导入,构建依然失败;移除Prisma相关代码后构建完全正常。
关键特征:
- 报错路径会随使用的终端(PowerShell/Git Bash)不同而变化
- 使用
@prisma/extension-accelerate扩展时出现该问题 - 近期依赖更新前构建完全正常
解决方案
1. 排查Accelerate扩展的缓存扫描问题
Accelerate扩展可能在构建阶段误扫描系统受限目录,先临时移除扩展验证:
修改prisma.ts:
import { PrismaClient } from "@/lib/generated/prisma"; const globalForPrisma = global as unknown as { prisma: PrismaClient; }; // 暂时移除withAccelerate扩展 const prisma = globalForPrisma.prisma || new PrismaClient(); if (process.env.NODE_ENV !== "production") globalForPrisma.prisma = prisma; export default prisma;
若构建恢复正常,说明是扩展导致的问题,可尝试:
- 升级
@prisma/extension-accelerate到最新版本 - 在
.env中手动指定项目内的缓存目录,避免访问系统目录:PRISMA_ACCELERATE_CACHE_DIR=./.prisma/cache
2. 修复终端环境变量映射异常
Windows下Application Data是AppData\Roaming的旧别名,部分终端可能存在环境变量映射错误:
- 检查终端的
APPDATA环境变量,确保指向正确路径(C:\Users\<用户名>\AppData\Roaming) - 以管理员权限运行终端,重新执行
pnpm run build
3. 限制Webpack的扫描范围
在next.config.js中添加规则,阻止Webpack扫描系统受限目录:
/** @type {import('next').NextConfig} */ const nextConfig = { webpack: (config) => { // 移除模块范围限制插件,避免误扫描外部目录 config.resolve.plugins = config.resolve.plugins.filter( (plugin) => plugin.constructor.name !== "ModuleScopePlugin" ); // 排除系统目录的扫描规则 config.module.rules.push({ test: /\.js$/, exclude: /C:\\Users\\.*\\Application Data/, }); return config; }, }; export default nextConfig;
4. 清理缓存并重新生成依赖
- 删除项目内的
.prisma文件夹 - 执行
pnpm prisma generate重新生成Prisma客户端 - 清理并重装依赖:
pnpm rm -rf node_modules pnpm install
内容的提问来源于stack exchange,提问作者auziqni
相关产品推荐
相关产品推荐

