在OS X系统安装Appium@1.7.2时遇权限错误,请求协助解决
解决OS X安装Appium 1.7.2时的EACCES权限错误
遇到这个权限问题很常见,主要是npm在root权限下运行的安全机制,或是全局目录的权限配置冲突导致的。这里有几个靠谱的解决方法:
方法1:修复npm全局目录权限(推荐,一劳永逸)
这个方法能让你以后安装全局npm包都不用sudo,从根源解决权限问题:
- 先创建一个属于当前用户的全局npm目录:
mkdir -p ~/.npm-global - 配置npm使用这个新目录作为全局包的安装路径:
npm config set prefix '~/.npm-global' - 把新目录的bin路径添加到shell配置文件(bash用户编辑
~/.bash_profile,zsh用户编辑~/.zshrc):echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bash_profile - 刷新shell配置,让修改生效:
source ~/.bash_profile - 现在直接安装Appium,无需sudo:
npm install -g appium@1.7.2
方法2:用--unsafe-perm参数跳过npm权限降级
如果不想修改全局目录配置,可以在sudo安装时加上--unsafe-perm=true参数,它会让npm保持root身份执行所有安装脚本,避免切换到普通用户导致的权限不足:
sudo npm install -g appium@1.7.2 --unsafe-perm=true
方法3:通过Homebrew安装Node和Appium
Homebrew安装的Node会自动配置好全局目录权限,全程不用sudo:
- 先安装Homebrew(未安装的话):
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - 安装Node:
brew install node - 直接安装Appium:
npm install -g appium@1.7.2
补充说明
出现这个错误的核心原因是:当用sudo执行npm安装时,npm的安全机制会自动降级到nobody用户去执行第三方包的安装脚本(比如appium-chromedriver的install-npm.js),而nobody用户没有权限写入/usr/local/lib/node_modules下的子文件夹,因此触发了EACCES权限拒绝错误。上面的方法要么绕过这个降级机制,要么改变全局包的安装路径来避开权限冲突。
内容的提问来源于stack exchange,提问作者Renato Santana
相关产品推荐
相关产品推荐

