javascript - Npm 错误 "Error: EACCES: permission denied, mkdir ' ../node-sass/build'"

标签 javascript node.js npm

无法通过 npm sudo npm i 安装 node-sass 包,我一直在尝试通过 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

最佳答案

作为一般建议,切勿使用 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 install sudo npm anything 阅读此 article想知道为什么

虽然使用chownchmod 更改权限有点不错并且有效,但是这不是安装包时的最佳方法全局,如果您使用的是 Linux 或 OSX,我建议您阅读 npm 文档上的这篇文章 here ,然后使用 nvm,或者手动更改 npm 的默认目录。

更改 npm 的默认目录

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

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

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

    npm config set prefix '~/.npm-global'
    
  3. 在您首选的文本编辑器中,打开或创建一个 ~/.profile 文件 [或者您可以编辑 ~/.bashrc ~/.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。 您可以阅读有关此主题的更多信息 here

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

  npm install sass 

或全局:

  npm install -g sass 

关于javascript - Npm 错误 "Error: EACCES: permission denied, mkdir ' ../node-sass/build'",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55668065/

相关文章:

javascript - 在不使用任何标准 JavaScript 方法的情况下检查字符串是否包含子字符串?

javascript - Node 从 req.params.id 结果中取出数组

node.js - 没有注册的Sinon Spy已被调用(Async/Await)

node.js - Node Bcrypt 比较总是返回成功

node.js - 项目中依赖项的包管理器

javascript - 使用 jquery 提取 src 并粘贴到 html 链接之前

JAVA servlets - 打开消息弹出窗口

node.js - 如何将 Gulp 添加到我的项目中?

npm - 设置 strapi 项目时无法安装依赖项

javascript - 正则表达式可视化工具