设置npm prefix后执行命令遇EPERM及TypeError,求解决方案
嘿,这个问题我之前帮朋友处理过,来给你理清楚前因后果和修复步骤:
问题原因分析
你执行的npm config set prefix /usr/local是**类Unix系统(Linux/macOS)**的配置逻辑,但你当前是在Windows环境下操作——从报错里的C:\Program Files\Git\usr\local路径就能看出来,npm把这个Unix风格的路径解析到了Git for Windows的模拟目录里,而这个系统目录你没有写入权限,所以触发了EPERM权限错误;后面的Cannot read property 'get' of undefined是权限错误引发的连锁异常,核心问题还是prefix配置错了路径+权限不足。
修复方案
下面两种方法都能解决问题,选你顺手的来:
方法一:通过命令重置prefix配置
打开CMD或者PowerShell,依次执行这两条命令:
npm config delete prefix npm config set prefix %AppData%\npm
第一条命令会删掉你之前设置的错误prefix,第二条会把prefix重置为Windows下npm的默认用户目录(这个目录属于你的个人用户,不会有权限问题)。
方法二:手动修改npm配置文件
如果执行命令还是报错,直接改配置文件更稳妥:
- 打开文件管理器,在地址栏输入
%USERPROFILE%回车,找到.npmrc文件(如果看不到,要开启“显示隐藏文件”选项) - 用记事本打开这个文件,找到写着
prefix=/usr/local的行,把它改成prefix=${APPDATA}\npm,保存文件 - 重启你的终端,再运行npm命令就正常了
另外提醒下:以后在Windows下自定义npm全局包路径时,一定要用Windows风格的路径(比如D:\npm-global),别再用Unix风格的路径啦。
内容的提问来源于stack exchange,提问作者Leon Bogod




