javascript - 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
解决方案
作为一般建议,切勿使用 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
注意:安装本地软件包时这很好,但对于全局安装,请阅读下面的更新
更新
虽然使用chown
or更改权限还不错并且可以工作,但是在全局chmod
安装软件包时它不是最好的方法,如果你在 Linux 或 OSX 上,我建议你在这里阅读 npm 文档上的这篇文章,或者使用,或手动更改 npm 的默认目录。nvm
更改 npm 的默认目录
为此,您需要执行以下步骤:
在命令行的主目录中,为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
在您首选的文本编辑器中,打开或创建一个
~/.profile
文件 [或者,您可以编辑~/.bashrc
or~/.zshrc
文件,而不是.profile
如果您认为合适] 并添加以下行:export PATH=~/.npm-global/bin:$PATH
在命令行上,更新您的系统变量:
source ~/.profile # or source ~/.bashrc, # source ~/.zshrc, depends on where you exported the path
要测试您的新配置,请在不使用 sudo 的情况下全局安装包:
npm install -g jshint
您可以全局安装 node-sass:
npm install -g node-sass
现在你不应该得到权限错误,因为这应该解决全局安装包时的 EACCES 权限错误。
警告
LibSass
并node-sass
已弃用。虽然他们将继续无限期地接收维护版本,但没有计划添加额外的功能或与任何新的 CSS 或 Sass 功能兼容,仍然使用它的项目应该转移到 Dart Sass。您可以在此处阅读有关此主题的更多信息
请改用 sass,迁移到 Dart Sass 很简单而且两个包都暴露了相同的 JavaScript API,以安装 dart sass:
npm install sass
或全球:
npm install -g sass
推荐阅读
- c# - 实体框架多对一?
- ios - Swift 将输入 URL 编码为浏览器显示的最终 URL
- javascript - 根据表格数据隐藏和显示单选按钮
- spring - 两个 Spring Boot 微服务之间的 OAuth2 身份验证请求
- nan - 如何在综合控制方法中运行负值
- php - 在我的购物车中创建会话数组不起作用
- sql - 在 sqlalchemy 中设置自引用多对多关系
- tensorflow - 如何仅在主块对角线上为协方差矩阵 RBF 加上噪声在 GPflow 中编写自定义内核?
- azure - 此 Azure DevOps 存储库中的宏是否会导致我的部署管道失败?
- python - Word2Vec 对象不可下标