You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:04:52