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
该方法仅能临时恢复服务,无法解决根本问题。
根本原因及根治方案
可能原因
.next目录权限异常:之前可能通过root权限执行过构建或开发命令,导致.next目录下文件被root用户拥有,普通用户无法修改/删除。- Node.js全局安装权限问题:若Node.js是通过root权限全局安装的,可能导致依赖运行时出现权限冲突。
- 项目目录权限配置错误:项目目录或其子目录的权限设置限制了普通用户的读写操作。
根治方案
方案1:清理并重新初始化项目
- 删除
.next目录:
rm -rf .next
- 删除依赖目录和锁文件:
# npm用户 rm -rf node_modules package-lock.json # pnpm用户 rm -rf node_modules pnpm-lock.yaml
- 用普通用户权限重新安装依赖:
# npm用户 npm install # pnpm用户 pnpm install
- 启动开发服务:
# npm用户 npm run dev # pnpm用户 pnpm run dev
方案2:修复Node.js全局权限(若全局安装用了root)
- 创建专属全局安装目录:
mkdir -p ~/.npm-global
- 配置npm使用该目录:
npm config set prefix '~/.npm-global'
- 将目录添加到系统PATH(编辑
~/.bashrc或~/.zshrc):
export PATH=~/.npm-global/bin:$PATH
- 使配置生效:
source ~/.bashrc # zsh用户执行 source ~/.zshrc
- 后续安装全局依赖无需使用sudo。
方案3:修复项目目录权限
确保项目目录及其所有内容的所有者和权限正确:
# 设置所有者为当前用户 chown -R $USER:$USER ~/projects/nextjs-dashboard # 赋予当前用户读写权限 chmod -R u+rw ~/projects/nextjs-dashboard
内容的提问来源于stack exchange,提问作者RedFox
相关产品推荐
相关产品推荐

