更新npm后执行npm run build失败,报错EACCES权限被拒绝
解决方案
按以下步骤执行即可修复问题:
- 第一步:强制删除当前存在权限问题的build目录
sudo rm -rf build
- 第二步:重置项目目录下所有文件的所有者为当前登录用户,解决历史sudo操作导致的文件属主异常问题
sudo chown -R $USER:$GROUP .
- 第三步:清理npm本地缓存,排除缓存文件权限异常带来的影响
npm cache clean --force
- 可选第四步:如果执行完上述步骤依旧报错,可以删除依赖锁文件与依赖目录后重装依赖
rm -rf node_modules package-lock.json && npm install
问题根因
该问题是npm 7版本和npm 6版本的权限校验逻辑差异导致的:
npm 7重构了文件系统操作的权限校验规则,会严格校验操作路径的所有者是否和当前执行命令的用户一致,只要所有者不匹配就会抛出权限错误;而npm 6对该场景的校验逻辑较为宽松,即使所有者不匹配也能正常执行写入、删除操作。
之前用sudo执行npm相关命令时,会把生成的文件(包括build目录、node_modules下的文件、缓存文件等)的所有者设为root,后续用普通用户执行命令就会触发权限校验失败;而继续用sudo执行build命令时,npm 7会默认降权到文件原始所有者执行操作,依旧会因为权限不匹配报错。
内容的提问来源于stack exchange,提问作者Sinan Yaman
相关产品推荐
相关产品推荐

