npm install 报错 EACCES: permission denied, mkdir XXXX

一、npm版本

[root@iz8vb2aig38pyedluqu4asz]# npm -version
6.14.4

二、报错现象

Copying to target path /data/jenkins/workspace/BigData/platform-web/node_modules/chromedriver/lib/chromedriver
ChromeDriver installation failed { Error: EACCES: permission denied, mkdir '/data/jenkins/workspace/BigData/platform-web/node_modules/chromedriver/lib/chromedriver'
    at Object.mkdirSync (fs.js:750:3)
    at /data/jenkins/workspace/BigData/platform-web/node_modules/chromedriver/install.js:230:10
  errno: -13,
  syscall: 'mkdir',
  code: 'EACCES',
  path:
   '/data/jenkins/workspace/BigData/platform-web/node_modules/chromedriver/lib/chromedriver' }

三、问题原因

官方解释: 如果使用根权限调用npm,那么它将把uid更改为用户帐户或用户配置指定的uid,默认为nobody。设置unsafe perm标志以运行具有根权限的脚本。

四、问题解决

[root@iz8vb2aig38pyedluqu4asz]# npm install --unsafe-perm

 

### 解析 EACCES 权限拒绝错误 当遇到 `EACCES: permission denied, mkdir` 错误时,这通常意味着当前用户没有足够的权限来创建指定的目录或写入特定位置。此类问题可能发生在安装全局包或者在受保护路径下操作时。 #### 使用 sudo 提升权限 对于需要更高权限的操作,可以尝试通过 `sudo` 命令提升权限来进行安装: ```bash sudo npm install -g package-name --unsafe-perm=true --allow-root ``` 此命令允许以超级用户身份运行并忽略某些安全限制[^2]。 #### 修改文件夹权限 如果目标是在某个具体的工作空间中解决问题,则可以通过更改该工作区文件夹的访问权限来实现: ```bash sudo chmod -R 755 /path/to/project/directory ``` 上述命令会递归地设置项目目录及其子项的读取、执行权限给所有人,并赋予所有者写入权限[^3]。 #### 配置 nvm 和多版本管理器 为了避免频繁使用 `sudo` 及其带来的安全隐患,在 macOS 或 Linux 上推荐采用 Node 版本管理工具如 nvm (Node Version Manager),它可以帮助更方便地管理和切换不同版本的 Node.js 而无需管理员权限: ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash source ~/.bashrc nvm install stable ``` 这些脚本将下载最新稳定版的 Node 并自动配置环境变量以便立即可用[^4]。 #### 更改 npm 的默认 global prefix 为了防止未来再次发生类似的权限问题,还可以考虑改变 npm 默认存储全局模块的位置到一个不需要特殊权限的地方: ```bash mkdir ~/npm-global npm config set prefix '~/npm-global' export PATH="$HOME/npm-global/bin:$PATH" echo 'export PATH="$HOME/npm-global/bin:$PATH"' >> ~/.profile ``` 这段代码会在用户的家目录下建立一个新的全局模块存放点,并更新系统的 PATH 环境变量使其生效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值