今天使用npm安装全局依赖,出现了报错如下:
Error: EACCES: permission denied, mkdir... .node-gyp
网上搜类似的错误可能还会在安装node-sass
时候出现。经过一番搜索,基本锁定了解决方式,即使用如下命令进行全局安装
npm install -g xxx --unsafe-perm
亲测是可以成功安装的,但本着知其所以然的态度还仔细钻研了一下。原因简单来说你即使使用sudo npm install,但执行安装时候并非使用root用户安装
首先来看下官方解释:
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.
以上意思是说,普通用户这个值默认就是true,但如果是root用户则为false。而false的时候会切换用户,也就是root的时候会切换为其他用户。我觉得可以理解为出于安全考虑,即所谓的unsafe(不安全)是因为你用root权限执行安装可能会覆盖其他用户或用户组的文件,而非root用户则没有问题,所以可以默认设置为true。
unsafe-perm 可以保证用户不会被切换,即仍旧是root用户,即可以保证成功安装。
这里有一篇文章讲的非常不错