NPM/Cordova permissions Error: EACCES: permission denied, scandir

NPM/Cordova permissions Error: EACCES: permission denied, scandir

当我 运行 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'

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

对于 Mac 用户,如果您正在寻找快速答案,您可以编辑位于 [=13] 的 .npm 文件夹的权限=].

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

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

万一其他人带着一个 Mac cordova 环境到达,而这个环境已经无法修复,这是我唯一的解决方案(在经历了很多痛苦之后):

  • 备份一切
  • 删除所有 cordova 平台(警告:这将破坏您在平台内完成的任何自定义操作,因此会破坏备份)
  • 全局卸载 cordova
  • 卸载 npm;我只是使用了他们网站上的基本命令:sudo npm uninstall npm -g
  • 安装 NVM
  • 通过它,安装 Node 长期稳定
  • 安装 cordova(不再需要 sudo)
  • 获得你的项目目录的权限(我递归地完成了我的整个用户目录)
  • 添加您的平台
  • 在您的任何自定义设置中有所不同
  • 找张舒服的椅子喝苏格兰威士忌