在OSX中安装npm模块时权限被拒绝

Not*_*ter 45 macos node.js npm

我正在尝试安装node-g.raphael,我收到以下错误:

Bender-03:htdocs alfred$ sudo npm install node-g.raphael --save
Password:

> contextify@0.1.15 install 
  /Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
> node-gyp rebuild

gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir 
  '/Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify/build'
gyp ERR! System Darwin 16.7.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 
  /Users/alfred/Sites/twistedgeo/htdocs/node_modules/contextify
gyp ERR! node -v v8.8.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15 
  (node_modules/contextify):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: contextify@0.1.15 
  install: `node-gyp rebuild`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1

+ node-g.raphael@0.0.9
added 2 packages and updated 1 package in 6.556s
Run Code Online (Sandbox Code Playgroud)

我试过这个解决方案,但它没有解决我的问题,仍然得到同样的错误.

让我知道是否有任何我可以添加来帮助解决这个问题.

ant*_*rek 130

修复npm权限看到这个并且它有所帮助,也许你也可以试一试.

  • 选项1:将权限更改为npm的默认目录

    1. 找到npm目录的路径:

      npm config get prefix

对于许多系统,这将是/usr/local.

警告:如果显示的路径是正确的/usr,请切换到选项2,否则您将弄乱您的权限.

  1. 将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 node-g.raphael --save`
Run Code Online (Sandbox Code Playgroud)

您可以使用相应的ENV变量(例如,如果您不想修改~/.profile),而不是步骤2-4 :

NPM_CONFIG_PREFIX=~/.npm-global
Run Code Online (Sandbox Code Playgroud)
  • 选项3:使用包管理器为您处理此问题.

如果您在Mac OS上进行全新的Node安装,则可以使用Homebrew软件包管理器完全避免此问题.Homebrew使用正确的权限设置开箱即用的东西.

brew install node

我希望这有帮助

  • 太棒了!最重要的是“不使用sudo”部分挽救了我的生命:) (2认同)
  • 这个答案对我帮助很大。感谢您精心设计且易于理解的答案。需要注意的是,如果您使用 Fish shell 并且使用选项 1,那么您需要删除命令中的 `$`,以便其内容如下: `sudo chown -R (whoami) (npm config get prefix) /{lib/node_modules,bin,share}` 再次感谢您的精彩回答! (2认同)
  • 我尝试执行选项 2 步骤。在 MacOS Catalina v10 上,默认 shell 是 ZSH,它使用 ~/.zprofile 而不是 ~/.profile。这就是为什么上面的配置一开始在终端上不起作用,但当使用 BASH shell 时它起作用了。您可以在这里找到详细说明:https://superuser.com/a/187673 (2认同)

小智 9

我用:

  1. npm config get prefix
  2. sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  3. sudo npm install