npm install -g 报 eacces 的根本原因是 npm 默认将全局包安装到 /usr/local/lib/node_modules,该路径在 macos/linux 下普通用户无写权限;正确解法是执行 npm config set prefix ~/.local 并将 ~/.local/bin 加入 path(如编辑 ~/.zshrc 添加 export path=~/.local/bin:$path),再 source 生效。

npm install -g 报 EACCES 是路径权限问题,不是共享环境导致的
VSCode 多工作区共享同一全局 Node 环境时,npm install -g 报 EACCES 或 Permission denied,根本原因不是“多工作区”惹的祸,而是 npm 默认把全局包装进 /usr/local/lib/node_modules——这个目录 macOS/Linux 下普通用户没写权限。多个工作区共用同一个 npm 二进制,只是放大了这个问题的可见性。
错误信息里只要出现 EACCES 和 /usr/local/lib/node_modules,就别怀疑,直接改 prefix:
- 运行
npm config set prefix ~/.local - 编辑
~/.zshrc(macOS Catalina 及以后),追加:export PATH=~/.local/bin:$PATH - 执行
source ~/.zshrc,再验证which npm和which node是否指向一致路径
多工作区下 require() 找不到包?检查 node_modules 是否被跨项目误引用
一个工作区 A 安装了 lodash 到本地 node_modules,工作区 B 的代码却试图 require('lodash')——这不会自动成功。Node.js 的模块解析是按当前文件的 __dirname 向上逐级找 node_modules,不会跨工作区根目录查找。
常见误判场景:
- 在工作区 B 的 JS 文件里写了
require('lodash'),但 B 没执行过npm install lodash - 用了
npm link或file:依赖但没在 B 的package.json中声明 - TS 项目里
import了未安装的包,VSCode 波浪线提示“Cannot find module”,实际是类型定义缺失,不是运行时问题
解决办法很简单:每个工作区独立管理自己的 node_modules。不要指望“共享 Node 环境”等于“共享已安装包”。
VSCode 终端在多工作区中 PATH 不一致?根源是 shell 启动模式
你在系统终端里 node -v 正常,但在 VSCode 集成终端里报 command not found,尤其在打开多个工作区后更频繁——这不是工作区冲突,而是 VSCode 终端默认以非交互模式启动 shell,不加载 ~/.zshrc 里的 PATH 扩展。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
验证方式:
- 在 VSCode 终端运行
echo $SHELL和shopt login_shell(zsh 下用echo $- | grep i) - 对比系统终端输出,若缺少
i(interactive flag),说明配置没生效
修复方法(二选一):
- 临时:在 VSCode 终端手动执行
source ~/.zshrc - 永久:VSCode 设置里搜
terminal.integrated.shellArgs.osx,设为["-i"]
Live Share 共享时 npm install 权限异常?来宾不该有全局安装权限
当你用 Live Share 邀请协作者加入多工作区项目,对方在集成终端里执行 npm install -g serve 失败,这不是 bug,是设计使然——Live Share 默认禁止来宾执行可能影响主机系统的操作,包括写入全局 node_modules。
真正该做的:
- 提醒协作者只运行
npm install(无-g),所有依赖应装在当前工作区的node_modules下 - 在
.vscode/settings.json中明确禁用终端共享:"liveshare.shareTerminal": false - 若必须调试 CLI 工具,提前在 host 侧装好,并用
npm bin查出可执行路径,让来宾直接调用绝对路径
多工作区本身不制造权限越界,但会暴露你原本忽略的路径隔离和环境继承细节——尤其是 prefix、PATH、node_modules 查找规则这三处,错一个,整个依赖链就断在看不见的地方。










