首页 > 解决方案 > Npm 错误“错误:EACCES:权限被拒绝,mkdir '../node-sass/build'”

问题描述

无法通过 npm 安装 node-sass 包sudo npm i,我一直在尝试通过解决,sudo npm i -g node-sass --unsafe-perm=true --allow-root但它没有效果。chmod 777 要么。我认为有些东西具有 npm 权限,但我不知道日志:

gyp verb build dir attempting to create "build" dir: /home/michael/Desktop/react/node_modules/node-sass/build
gyp ERR! configure error 
gyp ERR! stack Error: EACCES: permission denied, mkdir '/home/michael/Desktop/react/node_modules/node-sass/build'
gyp ERR! System Linux 4.15.0-47-generic
gyp ERR! command "/usr/bin/node" "/home/michael/Desktop/react/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /home/michael/Desktop/react/node_modules/node-sass
gyp ERR! node -v v11.14.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
Build failed with error code: 1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.7 (node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.7: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-sass@4.11.0 postinstall: `node scripts/build.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the node-sass@4.11.0 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/michael/.npm/_logs/2019-04-13T17_21_20_424Z-debug.log

标签: javascriptnode.jsnpm

解决方案


作为一般建议,切勿使用 sudo 运行 npm install ,因为它会创建由 root 而不是您的用户拥有的本地文件,我认为您应该尝试以下操作:

  • 首先更改文件夹的所有者 : chown -R yourusername:yourusername /home/michael/Desktop/react/,或者如果您不想输入用户名:chown -R $USER:$USER /home/michael/Desktop/react/
  • 然后运行 ​​: npm install node-sass,不要使用 sudo

注意:安装本地软件包时这很好,但对于全局安装,请阅读下面的更新


更新

虽然使用chownor更改权限还不错并且可以工作,但是在全局chmod安装软件包时它不是最好的方法,如果你在 Linux 或 OSX 上,我建议你在这里阅读 npm 文档上的这篇文章,或者使用,或手动更改 npm 的默认目录。nvm

更改 npm 的默认目录

为此,您需要执行以下步骤:

  1. 在命令行的主目录中,为全局安装创建一个目录:

    mkdir ~/.npm-global
    
  2. 配置 npm 以使用新的目录路径:

    npm config set prefix '~/.npm-global'
    
  3. 在您首选的文本编辑器中,打开或创建一个~/.profile文件 [或者,您可以编辑~/.bashrcor~/.zshrc文件,而不是.profile如果您认为合适] 并添加以下行:

    export PATH=~/.npm-global/bin:$PATH
    
  4. 在命令行上,更新您的系统变量:

    source ~/.profile  
    
    # or source ~/.bashrc,
    # source ~/.zshrc, depends on where you exported the path
    
  5. 要测试您的新配置,请在不使用 sudo 的情况下全局安装包:

    npm install -g jshint 
    

您可以全局安装 node-sass:

    npm install -g node-sass

现在你不应该得到权限错误,因为这应该解决全局安装包时的 EACCES 权限错误。


警告

LibSassnode-sass已弃用。虽然他们将继续无限期地接收维护版本,但没有计划添加额外的功能或与任何新的 CSS 或 Sass 功能兼容,仍然使用它的项目应该转移到 Dart Sass。您可以在此处阅读有关此主题的更多信息

请改用 sass,迁移到 Dart Sass 很简单而且两个包都暴露了相同的 JavaScript API,以安装 dart sass:

  npm install sass 

或全球:

  npm install -g sass 

推荐阅读