我一直在尝试安装一个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! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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来使这项工作,但安装后我仍然有同样的错误。
避免使用sudo npm -g install
在gyp编译期间,你会一次又一次地遇到这样的问题。修复权限是解决方案。
来自npm docs的报价:
您可以使用以下三个选项之一解决此问题:
- 将权限更改为npm的默认目录。
- 将npm的默认目录更改为另一个目录。
- 使用包管理器安装Node,为您解决此问题。您应该在继续前进之前备份计算机。
选项1:将权限更改为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
),而不是步骤2-4:
NPM_CONFIG_PREFIX=~/.npm-global
选项3:使用包管理器为您处理此问题。
如果您在Mac OS上进行全新的Node安装,则可以使用Homebrew软件包管理器完全避免此问题。 Homebrew使用正确的权限开箱即用。
brew install node
通常EACCES: permission denied
尝试全局安装包(使用-g)而不提供权限。假设您使用sudo在os上,请尝试通话
sudo npm install -g skpm
或者,如果你不想让它全球化
npm install skpm
我发现了为什么没有安装skpm的问题。
确保安装x-code +命令行工具访问权限
这解决了安装SKPM的问题。