EACCES: permission denied,mkdir … npm install 安装依赖问题解决

摘要:
但是当我们看到上面的提示时,我们发现消息是permissiondenied,这很奇怪。为什么我是根用户时没有权限?您还可以全局设置它:npmconfigsetunsafe permnpmconfig gsetunsafe perm(全局),因此以后安装时不需要添加此参数。npmi和npminstall的区别实际上是,但当有另一个村庄时,它真的刷新了强哥的三观:npmi不只是npminstall的缩写吗?

强哥最近在用hugeGraph图库做二次开发的时候,在打包的时遇到前端项目打包失败的问题:

cwebp-bin@4.0.0 postinstall /home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/cwebp-bin> node lib/install.js
⚠ EACCES: permission denied, mkdir '/home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/cwebp-bin/vendor' ⚠ cwebp pre-build test failed ℹ compiling from source/home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/onetime/index.js:15throw new Error(fnName + ' can only be called once.');        ^Error: callback() can only be called once. at callback (/home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/onetime/index.js:15:11) at /home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/download/index.js:156:5 at ConcatStream. (/home/hugegraph/my-hugegraph-studio/studio-ui/node_modules/concat-stream/index.js:37:43

强哥当时是用root用户执行npm install命令进行依赖安装的。

可是我们看到上面的提示发现,报的是permission denied,这就很奇怪,为什么我是root用户了,还会没有权限呢?

经过一番google之后,找到一个解决方案:
EACCES: permission denied,mkdir … npm install 安装依赖问题解决第1张
在安装命令后添加--unsafe-perm=true。于是便尝试了一下:
npm install --unsafe-perm=true
可是,依然会报上面的错误,这就很让人头疼。难不成没办法二次开发了?
在经过一番瞎鼓捣之后,强哥先试着单独安装没有安成功的那个包:
npm install cwebp-bin@4.0.0
不行,加上上面的配置:
npm install cwebp-bin@4.0.0 --unsafe-perm=true
还是不行,在山穷水复疑无路时,使用如下命令居然柳暗花明又一村:
npm i cwebp-bin@4.0.0 --unsafe-perm=true
欣喜若狂。哈哈,既然这样能成,为了不一个个的安装依赖包,那就一鼓作气,我们改成用这个命令install试试:
npm i --unsafe-perm=true
结果果然不出意料,安装(下载包依赖)成功了。

嘿嘿,问题解决了,那么我们就来总结下原因吧。从上面来看,我们弄清楚两点就行啦:

  • --unsafe-perm=true的意思
  • npm i 和 npm install的区别

--unsafe-perm=true的意思
官网解释:

unsafe-perm§
Default: false if running as root, true otherwise
Type: Boolean
Set to true to suppress the UID/GID switching when running package scripts. If set explicitly to false, then installing as a non-root user will fail.

摘自网络的解释就是:

就是说 npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户几乎没有任何权限。这样的话如果你脚本里有一些需要权限的操作,比如写文件(尤其是写 /root/.node-gyp),就会崩掉了。为了避免这种情况,要么按照 npm 的规矩来,专门建一个用于运行 npm 的高权限用户;要么加 --unsafe-perm 参数,这样就不会切换到 nobody 上,运行时是哪个用户就是哪个用户,即使是 root。

所以,看到这个解释,还是觉得挺奇怪,不过暂且这么理解吧,强哥也没有切换到普通用户试着install,哈哈原谅我的懒惰。
也可以全局设置一下:
npm config set unsafe-perm(针对当前用户的)
npm config -g set unsafe-perm(全局的)
这样以后就不用加这个参数进行install啦。

npm i 和 npm install的区别
其实,但是柳暗花明又一村的时候,也确实刷新了强哥的三观(原谅后端渣渣的无知):难道npm i 不单单是npm install的缩写吗?我学的时候好像就是这么解释的啊。

答案是确实不单单是:

实际使用的区别点主要如下(windows下):1. 用npm i安装的模块无法用npm uninstall删除,用npm uninstall i才卸载掉 2. npm i会帮助检测与当前node版本最匹配的npm包版本号,并匹配出来相互依赖的npm包应该提升的版本号 3. 部分npm包在当前node版本下无法使用,必须使用建议版本 4. 安装报错时intall肯定会出现npm-debug.log 文件,npm i不一定
好啦,弄明白这些,这个问题就算告一段落啦。

关注公众号获取更多内容,有问题也可在公众号提问哦:
EACCES: permission denied,mkdir … npm install 安装依赖问题解决第2张

强哥叨逼叨

叨逼叨编程、互联网的见解和新鲜事

免责声明:文章转载自《EACCES: permission denied,mkdir … npm install 安装依赖问题解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter之录制脚本(二)Nginx深度优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

rsync命令详解

介绍 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。 常用场景...

ansible(一)

Ansible简介 Ansible:Ansible的核心程序Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等。可以通过file来加载,可以通过CMDB加载。Playbooks:YAML格式文件,多个任务定义在一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用那些模块来...

NEXUS S安卓4.0/4.1 【完美】 ROOT教程

原文链接:http://bbs.gfan.com/android-3517082-1-1.html 进行bootloader解锁(即使解锁,再上锁),会清除你手机上的【所有】数据(包括内部的16G SD 存储),包括但不限于应用、设置、联系人和账户等,请做好数据备份!·理论上对各种版本、各种机型的ROM都可以获取ROOT权限。·关于Busybox,麻烦各位...

mysql源码安装

阿里云 windows 版本为 mysql 5.7 之后下载 boost库 () wget https://jaist.dl.sourceforge.net/project/boost/boost/1.61.0/boost_1_61_0.tar.gz 先后尝试编译安装boost_1_64_0.tar.gz 及boost_1_61_0.tar.gz 都在编译...

树莓派Dietpi系统配置Dueros

dietpi 系统安装alsa工具 安装依赖 sudoapt-getinstallpython-dateutil sudoapt-getinstallgir1.2-gstreamer-1.0 sudoapt-getinstallpython-pyaudio sudoapt-getinstalllibatlas-base-dev sudoapt-getins...

oh my zsh

简单使用oh my zsh 安装oh my Zsh 安装zsh 安装curl或者wget 下载并安装oh my zsh: curl 下载方式curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh wget下载wget https://raw...