EACCES: permission denied,mkdir … npm install 安装依赖问题解决
强哥最近在用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之后,找到一个解决方案:
在安装命令后添加--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 安装依赖问题解决的更多相关文章
- npm install Error: EACCES: permission denied, mkdir
今天研究Electron的时候,全局安装运行 npm install electron -g时侯,报下面的错误: Error: EACCES: permission denied, mkdir '/U ...
- mac上安装webpack报错解决方法Hit error EACCES: permission denied, mkdir '/usr/local/lib/node_modules/webpack
node-pre-gyp WARN Using needle for node-pre-gyp https download node-pre-gyp WARN Pre-built binaries ...
- Error: EACCES: permission denied, mkdir '......node-sass/build'错误解决方案
安装node-sass时出现一下错误: gyp ERR! configure error gyp ERR! stack Error: EACCES: permission denied, mkdir ...
- 【YEOMAN】执行yo命令,报EACCES: permission denied, mkdir '/root/.config/configstore'
基础环境:CentOS7.Nodejs6.0之上,yo:1.8.4 在执行yo初始化webapp时,报错,错误内容如下: Error: EACCES: permission denied, mkdir ...
- npm install 安装依赖报错
npm ERR! Unexpected end of JSON input while parsing near '...2.4.8","karma":"~0. ...
- Error: EACCES: permission denied, mkdir '/root/.nvm/versions/node/......
当我执行npm install -g node-inspector的时候报错. 所以就去网上搜索了一下答案. 有这么几种答案.请看完再执行相关命令 有说需要在前面加上sudo命令的. 不能解决我出现的 ...
- vue项目 npm install 安装依赖 特别慢 解决办法
使用NPM(Node.js包管理工具)安装依赖时速度特别慢,为了安装Express,执行命令后两个多小时都没安装成功,最后只能取消安装,笔者20M带宽,应该不是我网络的原因,后来在网上找了好久才找到一 ...
- vue 使用npm install安装依赖失败 【问题分析与解决】
1 进入项目根目录,先通过 npm install 命令安装项目所需依赖,再通过 vue ui 命令打开 Vue Cli 提供的图形化界面,选择项目所在文件夹将项目导入. 出现问题 npm insta ...
- Error: EACCES: permission denied, mkdir
今天在全局安装飞冰的时候,出现标题的错误 想到是权限不够的问题,其实飞冰官网也有解决的办法,就是更改npm的默认路径.我之前就是用了更改默认路径的方法,然后后来又恢复了默认路径,所以还是用默认路径加权 ...
随机推荐
- 重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 文无第一,武无第二 不同方向但同样努力的人,都有自身的价值和亮 ...
- P1004 方格取数——奇怪的dp
P1004 方格取数 题目描述 设有 \(N\times N\) 的方格图 \((N\leq 20)\),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 \(0\) .如下图所示(见样例) ...
- java学习第四天7/9
一. 今天学习了一些算法: 求最小值,最大值,平均值 接着学了几种排序方法 1.冒泡排序 (1)逐一比较数组中响铃的两个元素,如果后面的数字小于前面的数字,就交换先后元素: (2)经过一个轮次的比较, ...
- (转自MDN)CSS基础一定要看的包含块(containing block)
之前在写<个人常用的水平居中方法>这篇文章的时候,百分比问题涉及到了包含块(containing block)这个概念. 今天刷面试题的时候,又看到了containing block这个词 ...
- CTFHub_技能树_信息泄露
常用备份文件名: www.zip bak文件 在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容 以 ind ...
- JVM 专题十:运行时数据区(五)堆
1. 核心概述 1.1 堆概述 一个进程对应一个jvm实例,一个运行时数据区,又包含多个线程,这些线程共享了方法区和堆,每个线程包含了程序计数器.本地方法栈和虚拟机栈. 一个jvm实例只存在一个堆内存 ...
- java 面向对象(三十六):泛型五 通配符
1.通配符的使用 /* 通配符的使用 通配符:? 类A是类B的父类,G<A>和G<B>是没关系的,二者共同的父类是:G<?> */ @Test public voi ...
- scrapy 基础组件专题(九):scrapy-redis 源码分析
下面我们来看看,scrapy-redis的每一个源代码文件都实现了什么功能,最后如何实现分布式的爬虫系统: connection.py 连接得配置文件 defaults.py 默认得配置文件 dupe ...
- 数据可视化之DAX篇(十一)Power BI度量值不能作为坐标轴?这个解决思路送给你
https://zhuanlan.zhihu.com/p/79522456 对于PowerBI使用者而言,经常碰到的一个问题是,想把度量值放到坐标轴上,却发现无法实现.尤其是初学者,更是习惯性的想这么 ...
- hihoCoder 1051 补提交卡 最详细的解题报告
题目来源:补提交卡 解题思路:假设未提交程序的天数为:a1,a2,....,an,补交的张数为M.依次从a1,a2,....,an中去掉连续的 K 天(0<=K<=M),然后再来计算剩余数 ...