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

Ubuntu下npm/pnpm run dev权限报错,sudo可用但未根治问题求助

Next.js开发时EACCES权限错误问题

问题描述

  • 使用pnpm run dev或npm run dev启动Next.js开发服务时,出现EACCES权限错误,无法删除.next/app-build-manifest.json文件
  • 使用sudo执行相同命令则无异常,node_modules是通过普通用户权限安装的
  • 执行sudo chown -R ${USER} folder_name可临时解决问题,但无法根治

错误日志

someuser@someuser-normalUbuntu:~/projects/nextjs-dashboard$ pnpm run dev

> nextjs-dashboard@0.1.0 dev /home/someuser/projects/nextjs-dashboard
> next dev

   ▲ Next.js 14.0.4
   - Local:        http://localhost:3000
   - Environments: .env.development

Error: EACCES: permission denied, unlink '/home/someuser/projects/nextjs-dashboard/.next/app-build-manifest.json'
    at async Object.unlink (node:internal/fs/promises:1059:10)
    at async unlinkPath (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/lib/recursive-delete.js:25:13)
    at async Promise.all (index 0)
    at async recursiveDelete (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/lib/recursive-delete.js:51:5)
    at async Span.traceAsyncFn (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/trace/trace.js:147:20)
    at async HotReloader.start (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/server/dev/hot-reloader-webpack.js:587:9)
    at async startWatcher (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js:1197:5)
    at async setupDevBundler (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.js:1812:20)
    at async Span.traceAsyncFn (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/trace/trace.js:147:20)
    at async initialize (/home/someuser/projects/nextjs-dashboard/node_modules/.pnpm/next@14.0.4_react-dom@18.2.0_react@18.2.0_sass@1.69.6/node_modules/next/dist/server/lib/router-server.js:72:30) {
  errno: -13,
  code: 'EACCES',
  syscall: 'unlink',
  path: '/home/someuser/projects/nextjs-dashboard/.next/app-build-manifest.json'
}

环境信息

  • 系统版本:Ubuntu 22.04
  • Node.js版本:v21.6.2
  • npm版本:10.2.4
  • pnpm版本:8.15.3

临时解决方法

执行以下命令重置项目目录的所有者为当前用户:

sudo chown -R ${USER} folder_name

该方法仅能临时恢复服务,无法解决根本问题。

根本原因及根治方案

可能原因

  1. .next目录权限异常:之前可能通过root权限执行过构建或开发命令,导致.next目录下文件被root用户拥有,普通用户无法修改/删除。
  2. Node.js全局安装权限问题:若Node.js是通过root权限全局安装的,可能导致依赖运行时出现权限冲突。
  3. 项目目录权限配置错误:项目目录或其子目录的权限设置限制了普通用户的读写操作。

根治方案

方案1:清理并重新初始化项目

  1. 删除.next目录:
rm -rf .next
  1. 删除依赖目录和锁文件:
# npm用户
rm -rf node_modules package-lock.json
# pnpm用户
rm -rf node_modules pnpm-lock.yaml
  1. 用普通用户权限重新安装依赖:
# npm用户
npm install
# pnpm用户
pnpm install
  1. 启动开发服务:
# npm用户
npm run dev
# pnpm用户
pnpm run dev

方案2:修复Node.js全局权限(若全局安装用了root)

  1. 创建专属全局安装目录:
mkdir -p ~/.npm-global
  1. 配置npm使用该目录:
npm config set prefix '~/.npm-global'
  1. 将目录添加到系统PATH(编辑~/.bashrc或~/.zshrc):
export PATH=~/.npm-global/bin:$PATH
  1. 使配置生效:
source ~/.bashrc
# zsh用户执行
source ~/.zshrc
  1. 后续安装全局依赖无需使用sudo。

方案3:修复项目目录权限

确保项目目录及其所有内容的所有者和权限正确:

# 设置所有者为当前用户
chown -R $USER:$USER ~/projects/nextjs-dashboard
# 赋予当前用户读写权限
chmod -R u+rw ~/projects/nextjs-dashboard

内容的提问来源于stack exchange,提问作者RedFox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:44:55