node-sass 安装失败 gyp ERR! stack Error: EACCES: permission denied, mkdir '.../node-sass/build'

安装 node-sass

sudo npm i -g node-sass


node-sass 安装失败:

gyp ERR! stack Error: EACCES: permission denied, mkdir '.../node-sass/build'

gyp ERR! configure error 

gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/.node-gyp'

gyp ERR! System Darwin 18.7.0


使用 --unsafe-perm 安装成功

sudo npm i -g node-sass --unsafe-perm


就是说 npm 出于安全考虑不支持以 root 用户运行,即使你用 root 用户身份运行了,npm 会自动转成一个叫 nobody 的用户来运行,而这个用户几乎没有任何权限。这样的话如果你脚本里有一些需要权限的操作,比如写文件(尤其是写 /root/.node-gyp),就会崩掉了。


为了避免这种情况,要么按照 npm 的规矩来,专门建一个用于运行 npm 的高权限用户;要么加 --unsafe-perm 参数,这样就不会切换到 nobody 上,运行时是哪个用户就是哪个用户,即使是 root。



备注:

GYP是一种构建自动化工具。 GYP由Google创建,用于生成用于构建Chromium Web浏览器的本机IDE项目文件,并使用BSD软件许可证作为开源软件获得许可。GYP的功能类似于CMake构建工具。 GYP处理包含 JSON 字典的文件,以生成一个或多个目标项目make文件。


node-gyp:node下的gyp。至于为什么要有node-gyp,是由于node程序中需要调用一些其他语言编写的 工具 甚至是dll,需要先编译一下,否则就会有跨平台的问题,例如在windows上运行的软件copy到mac上就不能用了,但是如果源码支持,编译一下,在mac上还是可以用的。node-gyp在较新的Node版本中都是自带的(平台相关),用来编译原生C++模块。


参考:

https://docs.npmjs.com/misc/config#unsafe-perm

https://www.codercto.com/a/57205.html


声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
JavaScript class 的 this 指向
WordPress 文章置顶循环
WordPress 数据库表结构
什么是 RESTful API 的幂等性
Debian11 安装笔记2:编译安装PHP
JavaScript 原型链
Express 使用 method-override 处理动词覆盖
Debian11 安装笔记3:安装 MySQL 5.7