node-sass 安装失败 Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/.no...

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

image.png

➜ node_modules npm root -g
/usr/local/lib/node_modules

查看了node_modules包权限


image.png

安装 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

image.png

就是说 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

你可能感兴趣的:(node-sass 安装失败 Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/.no...)