在使用 npm update -gnpm install -g 安装全局包时,遇到了 EACCES: permission denied 错误

问题分析

错误信息显示 NPM 尝试写入 /usr/lib/node_modules 目录时被拒绝,这是一个系统目录,普通用户没有写入权限

npm error code EACCES
npm error syscall rename
npm error path /usr/lib/node_modules/npm/node_modules/env-paths
npm error errno -13
npm error Error: EACCES: permission denied

虽然可以使用 sudo 来临时解决,但这会导致安全问题和权限混乱,最佳实践是将 NPM 的全局目录迁移到用户主目录

解决方案

1. 创建用户级全局目录

在终端中创建一个属于你的目录来存放全局包:

mkdir ~/.npm-global

2. 配置 NPM 使用新目录

修改 NPM 配置,让它使用刚创建的目录:

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

3. 添加到环境变量

首先确认你使用的 Shell 类型:

echo $SHELL

根据结果编辑对应的配置文件:

  • 如果是 /bin/bash,编辑 ~/.bashrc
  • 如果是 /bin/zsh,编辑 ~/.zshrc

在文件末尾添加以下内容:

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

4. 使配置生效

重新加载 Shell 配置:

source ~/.bashrc
# 或者
source ~/.zshrc

5. 重新安装全局包

现在可以不使用 sudo 直接安装全局包了:

npm install -g @musistudio/claude-code-router