npm install -g 报 EACCES 的根本原因是默认路径 /usr/local/lib/node_modules 权限受限,正确解法是执行 npm config set prefix ~/.local 并将 ~/.local/bin 加入 PATH,而非使用 sudo。

npm install -g 报 EACCES 怎么办
根本不是 VSCode 的问题,而是 npm 默认把全局模块装到 /usr/local/lib/node_modules——这个路径普通用户没写权限。直接 sudo npm install -g 看似能过,但会污染系统、破坏 node_modules 权限链,后续 npm update 或 yarn 极易连锁报错。
- 执行
npm config set prefix ~/.local,让全局模块装进用户目录 - 编辑
~/.zshrc(macOS Catalina 及以后默认 shell 是 zsh),追加:export PATH=~/.local/bin:$PATH - 运行
source ~/.zshrc生效,再试npm install -g serve,会成功写入~/local/lib/node_modules - 别碰
sudo npm——它会让任意 preinstall 脚本以 root 身份执行,删库或改系统配置都可能
VSCode 终端里 which node 和 which npm 路径不一致
常见于 VSCode 启动时没加载 ~/.zshrc,导致 npm 和 node 指向不同来源(比如 npm 来自 Homebrew,node 却来自 nvm 或 pkg 安装)。
- 先在系统终端跑
which node和which npm,确认是否同源(都来自/opt/homebrew/bin/或都来自~/.nvm/versions/node/) - 在 VSCode 终端手动执行
source ~/.zshrc,再验证node -v - 更彻底:VSCode 设置里搜
terminal.integrated.shellArgs.osx,设为["-i"],让 zsh 以交互模式启动,自动加载配置 - 如果用了 nvm,确保
~/.nvm/nvm.sh已在~/.zshrc中正确source,且没有被return提前中断
Homebrew 安装的 Node 版本怎么切换
Homebrew 的版本化公式(如 node@18)不会自动链接,必须手动干预;brew link --force 是关键动作,但容易忽略 unlink 步骤。
- 查可用版本:
brew search node@(输出类似node@16、node@18) - 安装目标版本:
brew install node@18 - 先解除当前链接:
brew unlink node - 再强制链接:
brew link --force node@18 - 验证:
node -v应输出v18.x.x;which node应指向/opt/homebrew/bin/node(Apple Silicon)或/usr/local/bin/node(Intel)
yarn 命令在 VSCode 里找不到
VSCode 内置终端默认不继承 shell 的 PATH,所以系统终端能跑 yarn,VSCode 里却报 command not found。
- 先在系统终端执行
which yarn,记下路径(常见如/opt/homebrew/bin/yarn或~/.yarn/bin/yarn) - 不要从 Dock 启动 VSCode,改用命令行
code .启动,确保环境变量继承 - 兜底方案:VSCode 设置中搜
terminal.integrated.env.osx,手动补全 PATH,例如:"PATH": "/opt/homebrew/bin:/usr/local/bin:${env:PATH}" - 注意:Yarn PnP 模式下,TypeScript Server 必须识别 workspace 根目录(含
yarn.lock或.yarnrc.yml),否则报 “无法找到模块” 但项目实际能运行
真正卡住人的地方,往往不是命令本身,而是路径、权限、shell 模式这三者之间的隐式耦合——比如 brew link --force 后 node -v 对了,但 VSCode 终端仍调用旧版,大概率是 shellArgs 没设成 -i;又比如 yarn 能运行,但 TS Server 报错,十有八九是没在 workspace 根目录打开项目。


















