📜  npm 权限被拒绝 (1)

📅  最后修改于: 2023-12-03 15:18:01.702000             🧑  作者: Mango

npm 权限被拒绝

当使用 npm 安装或升级全局包时,可能会遇到以下错误:

npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { [Error: EACCES: permission denied, access '/usr/local/lib/node_modules']
npm ERR!   stack:
npm ERR!    'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR! 
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

这种情况通常是由于缺少安装或升级全局包的权限,导致无法将包写入到全局目录下。以下是一些解决方案:

1. 使用 sudo 运行命令

最简单的解决方案是使用 sudo 运行命令。例如,以管理员身份全局安装 npm

sudo npm install -g npm

使用 sudo 运行命令时需要注意以下事项:

  • sudo 会请求输入管理员密码。
  • 不要滥用 sudo,因为会有安全风险。
2. 更改全局包的目录

可以尝试将全局包的目录更改为当前用户的主目录下。首先创建一个目录用于存储全局包:

mkdir ~/.npm-global

然后将 npm 的配置修改为使用新的全局包目录:

npm config set prefix '~/.npm-global'

.bashrc.bash_profile 文件中加入以下内容:

export PATH=~/.npm-global/bin:$PATH

然后运行以下命令使修改立即生效:

source ~/.bashrc

或者:

source ~/.bash_profile

下次运行 npm 命令时,全局包将被安装在新目录中。

3. 修复 npm 的目录权限

如果出现权限问题,可能是 npm 目录的权限设置不正确。可以运行以下命令修复:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

上述命令将更改 npm 目录及其子目录和文件的所有者。

4. 不要全局安装

最后,如果只是为了在某个特定项目中使用某个包而不是整个系统中都要使用,建议不要全局安装该包。在项目目录下执行以下命令即可:

npm install <package-name>

这样将会把包安装到项目的 node_modules 目录下,只在该项目中可用。

以上是一些常见的解决方案,如果还有其他问题,请仔细阅读错误信息并搜索相关文档解决。