node-sass 安装失败 Error: EACCES: pe
Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/.node-gyp'
➜ 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++模块。
参考: