create-react-app创建项目时node_modules触发EACCES权限报错问题
问题根因
报错EACCES: permission denied, rename <project-path>/node_modules/cra-template的核心原因是npm权限配置异常:
- 之前存在使用
sudo执行npm全局安装/npx命令的操作,导致npm缓存目录、全局包目录下的文件归属为root用户 - npx运行create-react-app时以当前普通用户身份执行,拉取模板、安装依赖过程中没有权限修改root归属的文件,直接在重命名模板目录环节中断流程
手动修改单个项目node_modules归属的方案仅能修复当前项目的临时权限问题,没有解决全局npm配置的错误,因此每次新建项目都需要重复操作。
一次性永久修复方案
修复全局npm权限配置后,后续所有npx create-react-app命令都可以直接运行,无需额外手动改权限:
- 第一步:修复npm相关用户目录的归属权,把之前被sudo改成root所有的文件权限切回当前用户
sudo chown -R $USER:$USER ~/.npm sudo chown -R $USER:$USER ~/.config如果你自定义过npm全局安装前缀,可通过
npm config get prefix查询实际路径,将上述命令中的路径替换为查询到的路径即可。 - 第二步:强制清理npm缓存,删除残留的带异常权限的缓存包
npm cache clean --force - 第三步(推荐,彻底杜绝npm权限问题):将npm全局安装路径修改到用户目录下,避免后续需要sudo执行npm全局操作
- 创建用户级全局npm包目录:
mkdir -p ~/.npm-global - 配置npm使用该目录作为全局安装路径:
npm config set prefix ~/.npm-global - 将该路径加入系统环境变量:根据你使用的shell,打开对应的配置文件(zsh对应
~/.zshrc,bash对应~/.bashrc),在文件末尾添加如下内容:export PATH=~/.npm-global/bin:$PATH - 让配置立即生效:
# zsh用户执行 source ~/.zshrc # bash用户执行 source ~/.bashrc
- 创建用户级全局npm包目录:
- 第四步:验证修复,删除之前创建失败的项目目录,重新执行创建命令即可一次性成功
rm -rf my-app npx create-react-app my-app
注意事项
- 绝对不要用
sudo执行npx create-react-app,会导致生成的项目文件归属root,后续开发、运行命令时仍会触发权限报错 - 如果你使用nvm管理Node.js版本,默认不会出现这类权限问题——nvm安装的所有Node、npm相关文件都存放在用户目录下,不会涉及root权限操作;这类权限问题几乎都出现在直接通过系统包管理器(apt、yum、官方pkg安装包)安装Node.js的场景下。
内容的提问来源于stack exchange,提问作者Austin Rhoads
相关产品推荐
相关产品推荐

