背景:
有个好久没用的项目要改点东西,从git上下了代码之后执行npm install,竟然报错:
Unhandled rejection Error: EACCES: permission denied, rename '
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190725184540310.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1aXNoaWZveGlu,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190725184717354.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1aXNoaWZveGlu,size_16,color_FFFFFF,t_70)
分析:
查看报错可以发现是没有当前npm用来存储全局包命令目录的写权限
解决方法1:修改npm默认目录的权限
- 找到npm目录路径
npm config get prefix
⚠️注意:如果路径显示的是 /user,直接第二部 - 修改npm目录的拥有者为当前用户
执行sudo chown -R $(whoami) ~/.npm
或sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}(同时修改了npm下面子目录和其他工具命令(lib/node_modules,bin,and share))
- 重新执行npm install
解决方法2: 修改npm默认目录的位置
当不能简单的修改npm默认目录的拥有者时,可以修改npm目录位置。
-
创建一个目录用于全局包安装
mkdir ~/.npm-global
-
配置npm使其使用新的目录
npm config set prefix '~/.npm-global
-
打开或者新建~/.profile文件,并添加目录路径
export PATH=~/.npm-global/bin:$PATH
-
返回命令行界面,更新系统变量
source ~/.profile
测试:不使用sudo下载一个全局包npm install -g jshintjia’r
你也可以通过修改ENV环境变量来代替24步骤(假如你不想修改/.profile)
NPM_CONFIG_PREFIX=~/.npm-global npm install -g jshint