我一直在尝试安装一个npm包,它抛出了一堆我不太熟悉的错误。请注意,这些错误是在执行sudo npm install -g skpm
之后出现的:
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/skpm/node_modules/keytar/build'
gyp ERR! System Darwin 17.3.0
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/local/lib/node_modules/skpm/node_modules/keytar
gyp ERR! node -v v8.9.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! keytar@4.1.0 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the keytar@4.1.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/USERNAME/.npm/_logs/2017-12-19T01_53_44_910Z-debug.log
字符串
最初我认为我需要安装keytar来使其工作,但安装后我仍然有同样的错误。
3条答案
按热度按时间gzjq41n41#
**避免使用
sudo npm -g install
**在gyp编译过程中,你会一次又一次地遇到这样的问题。修复权限是解决方案。引用自npm docs:
您可以使用以下三个选项之一来解决此问题:
1.更改npm默认目录的权限。
1.将npm的默认目录更改为其他目录。
1.使用包管理器安装Node,包管理器将为您处理此问题。在继续之前,您应该备份计算机。
选项一:更改npm默认目录的权限
找到npm目录的路径:
npm config get prefix
对于许多系统,这将是/usr/local
。警告:如果显示的路径只是
/usr
,请切换到选项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配置为完全使用不同的目录。在我们的例子中,这将是我们的主文件夹中的一个隐藏目录。
为全局安装创建一个目录:
mkdir ~/.npm-global
个配置npm以使用新的目录路径:
npm config set prefix '~/.npm-global'
个打开或创建一个~/.profile文件,并添加以下行:
export PATH=~/.npm-global/bin:$PATH
个回到命令行,更新系统变量:
source ~/.profile
测试:不使用sudo全局下载一个包。
npm install -g jshint
您可以使用相应的ENV变量(例如:如果不想修改
~/.profile
):NPM_CONFIG_PREFIX=~/.npm-global
选项3:使用一个包管理器来为你处理这个问题。
如果你在Mac OS上进行Node的全新安装,你可以通过使用Homebrew包管理器来完全避免这个问题。Homebrew使用正确的权限设置开箱即用的东西。
brew install node
siv3szwd2#
通常情况下,
EACCES: permission denied
会在不提供权限的情况下尝试全局安装软件包(使用-g)。假设你在操作系统上使用sudo,试着调用字符串
或者,如果你不想让它全球化
型
xlpyo6sf3#
我发现了为什么skpm没有安装的问题。
确保安装了x-code +命令行工具访问
这修复了问题并安装了SKPM。