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

时间:2017-07-23 18:25:45

标签: linux macos cordova npm file-permissions

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

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:0)

对于 Mac 用户,如果您正在寻找快速答案,则可以编辑位于with test_data as( select date'2020-08-01' dt, '123 street' loc from dual union all select date '2020-08-01', '89 street' from dual union all select date '2020-08-02', '456 airport' from dual union all select date '2020-08-04', '456 airport' from dual union all select date '2020-08-05', '67 street' from dual union all select date '2020-08-06', '89 street' from dual union all select date '2020-08-07', '123 street' from dual ) select * from test_data match_recognize ( order by dt all rows per match pattern (equal{1,}) define equal as loc = prev(loc) ); 的{​​{1}}文件夹的权限。

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

这就是我解决案件的方式。

答案 2 :(得分:0)

如果其他人使用 sudo 无法修复的 Mac 科尔多瓦环境,这是我唯一的解决方案(经过很多痛苦之后):

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