升级到Next.js 12.0.0后生产构建报EPERM权限错误如何解决
问题原因
该报错仅出现在Next.js 12.0.0及以上版本,是开发服务运行时独占
.next目录下trace文件的读写权限,导致生产构建操作被系统拒绝。
完整报错日志
info - Creating an optimized production build .events.js:291 throw er; // Unhandled 'error' event ^ Error: EPERM: operation not permitted, open 'D:\etc\ss\ss\ss\.next\trace' Emitted 'error' event on WriteStream instance at: at D:\etc\ss\ss\ss\node_modules\next\dist\compiled\@vercel\nft\index.js:1:287421 at D:\etc\ss\ss\ss\node_modules\next\dist\compiled\@vercel\nft\index.js:1:287860 at FSReqCallback.oncomplete (fs.js:164:23) { errno: -4048, code: 'EPERM', syscall: 'open', path: 'D:\\etc\\ss\\ss\\ss\\.next\\trace' }
解决方案
- 执行生产构建前先终止正在运行的
next dev开发服务,释放.next目录的文件占用后再执行构建即可 - 开发环境和生产环境使用独立的代码目录,避免两个进程操作同一份构建缓存目录产生冲突
- 若需要同时保留开发服务运行,可指定生产构建的输出目录,执行命令
next build --dist-dir .next_prod,使用独立的构建目录避免和开发环境的.next目录产生资源竞争 - Windows平台下如果出现进程退出后文件依然异常占用的情况,可在任务管理器结束所有Node.js进程后再执行构建操作
内容的提问来源于stack exchange,提问作者Maxime Ghéraille
相关产品推荐
相关产品推荐

