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:权限被拒绝,取消链接 '/usr/local/bin/npm