NPM/Cordova 权限错误:EACCES:权限被拒绝,scandir

Posted

技术标签:

【中文标题】NPM/Cordova 权限错误:EACCES:权限被拒绝,scandir【英文标题】:NPM/Cordova permissions Error: EACCES: permission denied, scandir 【发布时间】:2017-12-29 07:49:43 【问题描述】:

当我运行 cordova plugin add cordova-plugin-geolocation 时,我收到以下错误。我已尝试在此文件夹上启用 777,将自己设置为所有者等。在这种情况下,我不允许使用 sudo,但我相信我可以解决问题。

Failed to install 'cordova-plugin-geolocation': Error: EACCES: permission denied, scandir '/Users/username/documents/core/myapp/app/platforms/ios/build/device/libCordova.a'
    at Error (native)
    at Object.fs.readdirSync (fs.js:952:18)
    at GlobSync._readdir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:275:41)
    at GlobSync._readdirInGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:254:20)
    at GlobSync._readdir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:263:17)
    at GlobSync._processReaddir (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:135:22)
    at GlobSync._process (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:130:10)
    at GlobSync._processGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:360:10)
    at GlobSync._process (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:128:10)
    at GlobSync._processGlobStar (/Users/username/documents/core/myapp/app/platforms/ios/cordova/node_modules/glob/sync.js:363:10)
Error: EACCES: permission denied, scandir '/Users/username/documents/core/myapp/app/platforms/ios/build/device/libCordova.a'

【问题讨论】:

首先你得告诉我们你正在使用的cordova版本和插件。是否仅针对此特定插件添加或全部发生? @Gandhi 我修好了。我所要做的就是在不使用 sudo 的情况下重新安装 cordova @Gandhi 我确实提到这是一个权限错误,一般来说会排除 Cordova 的版本或相关的特定插件 既然你特别提到了地理定位插件,我认为它可能是特定于插件的 @Ghandi 公平点虽然我的意思只是作为示例,但应该更清楚。赏金到期后将删除问题。还是谢谢 【参考方案1】:

NPM issue's

您可以使用以下三个选项之一解决此问题:

  1).Change the permission to npm's default directory.
  2).Change npm's default directory to another directory.
  3).Install node with a package manager that takes care of this for you.

您应该在继续之前备份您的计算机。

选项1:更改npm默认目录的权限

1).找到npm目录的路径:

    npm config get prefix

对于许多系统,这将是 /usr/local。

警告:如果显示的路径只是 /usr,请切换到选项 2,否则您会弄乱您的权限。

2).将 npm 目录的所有者更改为当前用户的名称(您的用户名!):

  sudo chown -R $(whoami) $(npm config get prefix)/lib/node_modules,bin,share

这会更改 npm 和其他一些工具(lib/node_modules、bin 和 share)使用的子文件夹的权限。

选项 2:将 npm 的默认目录更改为另一个目录

有时您不想更改 npm 使用的默认目录(即 /usr)的所有权,因为这可能会导致一些问题,例如,如果您与其他用户共享系统。

相反,您可以将 npm 配置为完全使用不同的目录。在我们的例子中,这将是我们主文件夹中的一个隐藏目录。

1).为全局安装创建一个目录:

 mkdir ~/.npm-global

2).配置 npm 使用新的目录路径:

 npm config set prefix '~/.npm-global'

3).打开或创建一个 ~/.profile 文件并添加这一行:

 export PATH=~/.npm-global/bin:$PATH

4).返回命令行,更新系统变量:

 source ~/.profile

测试:不使用 sudo 全局下载包。

 npm install -g jshint

除了步骤 2-4,您还可以使用相应的 ENV 变量(例如,如果您不想修改 ~/.profile):

  NPM_CONFIG_PREFIX=~/.npm-global

选项 3:使用包管理器为您处理此问题。

如果您在 Mac OS 上重新安装节点,则可以使用 Homebrew 包管理器完全避免此问题。 Homebrew 在获得正确权限的情况下开箱即用。

  brew install node

【讨论】:

感谢您的详细回答,但是我通过简单地卸载cordova然后重新安装它而不使用sudo 解决了这个问题 非常好,我收到你的来信,我们想要解决方案,就是这样.. 继续【参考方案2】:

对于 Mac 用户,如果您正在寻找快速答案,您可以编辑位于 /Users/$(whoami)/.npm.npm 文件夹的权限。

    转到.npm父文件夹(以防止在错误的位置运行第二个命令)。
$ cd /Users/$(whoami)
    运行 chmod 更改.npm 文件夹的权限。
$ sudo chmod -R 777 .npm/*

我的案子就是这样解决的。

【讨论】:

【参考方案3】:

万一其他人使用 sudo 无法修复的 Mac cordova 环境,这是我唯一的解决方案(在经历了很多痛苦之后):

备份所有内容 删除所有 cordova 平台(警告:这会破坏您在平台内完成的任何自定义操作,因此备份) 全局卸载cordova 卸载 npm;我刚刚使用了他们网站上的基本命令:sudo npm uninstall npm -g 安装 NVM 通过它,安装 Node long-term-stable 安装cordova(不再需要sudo) 获取项目目录的权限(我以递归方式完成了整个用户目录) 添加您的平台 在您的任何自定义项中进行差异化 找张舒适的椅子喝苏格兰威士忌

【讨论】:

以上是关于NPM/Cordova 权限错误:EACCES:权限被拒绝,scandir的主要内容,如果未能解决你的问题,请参考以下文章

错误:EACCES:权限被拒绝

错误:EACCES:权限被拒绝,mkdir '/.npm'

错误:EACCES:权限被拒绝,取消链接 '/usr/local/bin/npm

Meteor 错误:EACCES:权限被拒绝,rmdir 'build'

错误:EACCES:权限被永远拒绝

电子制造商:EACCES:权限被拒绝