Npm错误“错误:EACCES:权限被拒绝,mkdir '../node-sass/build'”

13

无法通过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
4个回答

26
作为一般建议,不要使用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
注意:这在安装本地软件包时是可以的,但对于全局安装,请阅读下面的更新。

更新

永远不要使用sudo npm installsudo npm anything,请阅读此文章了解原因。

虽然使用chownchmod更改权限可以正常工作,但这并不是在全局安装软件包时最佳方法。如果您正在使用Linux或OSX,我建议您在npm文档中阅读此文章here,并且要么使用nvm,要么手动更改npm的默认目录。

更改npm的默认目录

要这样做,您需要按照以下步骤进行:

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

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

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

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

  5. source ~/.profile  
    
    # or source ~/.bashrc,
    # source ~/.zshrc, depends on where you exported the path
    
  6. 为测试新的配置,请全局安装一个软件包而不使用sudo:

  7. 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 

请注意,下次安装node-sass时,请使用npm install node-sass命令,而不是sudo npm install node-sass。上面的bash命令只是为了解决在使用sudo npm -i node-sass时引起的EACCESS errno 1错误。 - WaLid LamRaoui
嗨,我遇到了一个问题。我全局安装了node-sass,但当我需要在sass中使用它时,它会报错,“要导入Sass文件,您首先需要安装node-sass”。所以每次使用sass都需要安装node-sass吗?或者有什么方法可以防止这种情况发生? - Michael Daineka
运行得很顺畅。 - Raushan
请记得在 <username>: 后面加上空格。 - Touqeer
我更新了如何修复全局安装软件包错误的答案。很抱歉一段时间内没有阅读评论区。 - WaLid LamRaoui
显示剩余2条评论

1

我按照@WaLid LamRaoui的答案指示操作,因为我也习惯使用sudo运行npm install。它似乎已经成功更改了文件夹的所有者,但是当我尝试运行npm install时仍然出现错误。然后我意识到另一个问题与我的缓存文件夹有关,其中包含root-owned文件,因此对于那些在遵循批准的答案后仍然遇到此问题的人,我只需执行以下操作:

sudo chown -R 1003:1003 "/home/<username>/.npm"

在此之后,我运行了npm install,它正常工作。

0

我通过运行解决了这个问题

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

0

什么都不用做,只需将--unsafe-perm添加到其中

给它不安全的权限访问。

所以,假设你之前正在安装bcrypt库

sudo npm install --save bcrypt

然后现在写

sudo npm install --unsafe-perm --save bcrypt

完成了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接