npm抛出没有sudo的错误

我只是通过nodejs.org上的软件包安装了node和npm,并且每当我尝试使用npm搜索或安装某些东西时,它都会引发以下错误,除非我对命令执行sudo。我觉得这是权限问题?我已经是管理员了。

npm ERR! Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR!  { [Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json']
npm ERR!   errno: 3,
npm ERR!   code: 'EACCES',
npm ERR!   path: '/Users/chietala/.npm/-/all/.cache.json' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 12.2.0
npm ERR! command "node" "/usr/local/bin/npm" "search" "bower"
npm ERR! cwd /Users/chietala
npm ERR! node -v v0.10.4
npm ERR! npm -v 1.2.18
npm ERR! path /Users/chietala/.npm/-/all/.cache.json
npm ERR! code EACCES
npm ERR! errno 3
npm ERR! stack Error: EACCES, open '/Users/chietala/.npm/-/all/.cache.json'
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/chietala/npm-debug.log
npm ERR! not ok code 0
猿神奇梅2020/03/13 17:46:00

@Yves M.的答案与我的解决方案非常相似。这是我使用的命令,与他稍有不同。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash

然后查询最新版本:

nvm ls-remote

然后安装最新版本:

nvm install YOUR_VERSION_HERE

nvm install v5.8.0
神奇启人2020/03/13 17:46:00

这是我利用和工作的解决方案。我尝试利用whoami从未奏效。

sudo chown -R $USER /usr/local/lib/node_modules

然后

sudo chown -R $USER /usr/local/bin/npm

然后

sudo chown -R $USER /usr/local/bin/node

2020/03/13 17:46:00

实际上,我也遇到同样的问题。我正在运行Ubuntu。我的问题出现是因为我丢失了Ubuntu的公钥。甚至没有更新我的系统。这是GPG错误。在这种情况下,您可以使用以下命令来重新获得密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <key in GPG error>

之后,npm正常工作!

Stafan小宇宙2020/03/13 17:46:00

我喜欢使用ubuntu组来实现此目的,而不是更改所有者。它很简单。

  1. 首先使用apt-get安装nodejs和npm

    sudo apt-get update && sudo apt-get install nodejs npm

  2. 找出谁登录,即用户名,运行以下命令在终端查看

    whoami

  3. 您可以使用非常简单的命令查看分配给您的组的列表,通常第一个组是您的用户名本身

    groups

  4. 运行以下命令以允许访问登录的用户

    sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local

  5. 更新npm和nodejs

    npm install -g npm

没关系,您的用户可以在不使用sudo的情况下运行npm命令

您也可以参考此链接https://askubuntu.com/a/1115373/687804

Eva乐2020/03/13 17:46:00

我通过将所有者从root更改为我的用户名来解决它

sudo chown -R me:me /home/me/.config/configstore/

用您的用户名和组来改变我。

逆天斯丁前端2020/03/13 17:46:00

约翰·帕帕(John Papa)指出了此问题的历史和原因,并给出了可靠的解决方法

约翰·帕帕(John Papa)的步骤是:

  1. 使用brew安装没有npm的节点
  2. 更新您的.bash_profile / .bashrc以使npm和node知道在哪里安装和找到软件包
  3. 使用brew更新节点,使用npm更新自身

希望这有助于好奇!

小卤蛋小卤蛋小哥2020/03/13 17:46:00

在Mac OS X上,使用Homebrew brew install npm进行安装,安装路径/usr/local/share/npm/同时包含bin/lib/node_modules/子文件夹。

运行此命令以将您的所有者更改为当前登录用户的所有者,应将其全部修复,并允许您在不安装的情况下安装全局NPM软件包sudo

sudo chown -R $USER ~/.npm /usr/local/share/npm/

神乐古一2020/03/13 17:46:00

这是我在Windows 8.1上解决此问题的方法:

  • 转到您的nodejs安装(通常为C:\ Program Files \ nodejs)
  • 右键单击node_modules文件夹,然后转到属性
  • 单击安全选项卡,然后单击高级。
  • 在顶部,您将看到“所有者:SYSTEM”,单击更改
  • 输入您要获得权限的用户,然后单击“确定”。
  • 选中高级设置“用此对象的可继承权限条目替换所有子对象权限条目”底部的框,然后单击“确定”。
  • 进行所需的任何npm安装/更新
JimLEYHarry2020/03/13 17:46:00

万一sudo chown -R $(whoami) ~/.npm对您不起作用,或者您需要一个非终端命令解决方案。

问题是您的用户帐户没有对node_modules文件夹的写权限,因此您可以执行以下操作

  1. 打开查找器,然后按cmd+ shift+,g这将打开转到带有URL的文件夹

  2. 输入以下路径/usr/local/lib/node_modules,然后按go

  3. 右键单击node_modules文件夹,然后选择Get Info

  4. 向下滚动到sharing & permissions部分

  5. 解锁即可进行更改。

  6. 按下+并添加您的用户帐户

  7. 确保您选择Read & Write了权限下拉菜单

现在,您应该可以不使用安装软件包,sudo并且应该解决权限问题

さ恋旧る2020/03/13 17:46:00

您可以尝试一下,可以在Ubuntu和Mac上使用

sudo chown -R $(whoami) /usr/local/lib/node_modules
宝儿樱2020/03/13 17:46:00

就我而言,这是由于〜/ tmp的许可。所以我这样做:

sudo chown -R $USER ~/tmp

没关系!

乐米亚2020/03/13 17:46:00

对我来说,只执行

sudo chown -R $(whoami) ~/.npm

不起作用。那我也执行

sudo chown -R $(whoami) /usr/lib/node_modules/
sudo chown -R $(whoami) /usr/bin/node
sudo chown -R $(whoami) /usr/bin/npm

而且一切正常!

逆天梅2020/03/13 17:46:00

对于Mac(摘自Christoper Will的回答)

Mac OS X 10.9.4

  1. 系统偏好设置>用户和组>(解锁)>按+:

    New Account > "Group"
    Account Name : nodegrp

    After creating the group, tick the user to be included in this group

  2. sudo chgrp -R nodegrp /usr/local/lib/node_modules/
    sudo chgrp nodegrp /usr/bin/node
    sudo chgrp nodegrp /usr/bin/npm
    sudo chown -R $(whoami):nodegrp ~/.npm

ItachiGreen2020/03/13 17:46:00

好像我们在这里需要更多答案,但是无论如何..

Sindre Sorus的指南在OS X和Linux上不使用sudo即可全局安装npm软件包,概述了如何在不干扰权限的情况下进行干净安装:

这是一种为给定用户全局安装软件包的方法。

  1. 为您的全局软件包创建目录

    mkdir "${HOME}/.npm-packages"
    
  2. 在.bashrc / .zshrc中引用此目录以供将来使用:

    NPM_PACKAGES="${HOME}/.npm-packages"
    
  3. 指示npm将全局安装的软件包存储在何处。$HOME/.npmrc文件中添加:

    prefix=${HOME}/.npm-packages
    
  4. 确保节点将找到它们。将以下内容添加到您的.bashrc / .zshrc中:

    NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
    
  5. 确保您将找到已安装的二进制文件和手册页。将以下内容添加到您的.bashrc/中.zshrc

    PATH="$NPM_PACKAGES/bin:$PATH"
    # Unset manpath so we can inherit from /etc/manpath via the `manpath`
    # command
    unset MANPATH # delete if you already modified MANPATH elsewhere in your config
    MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
    

检出npm-g_nosudo来自动执行上述步骤

请查看本指南来源以获取最新更新。

神乐路易2020/03/13 17:46:00

当您运行npm install -g somepackage时,可能会出现EACCES错误,要求您以root / Administrator身份再次运行命令。这是一个权限问题。

这是很容易解决,打开终端(应用程序>工具>终端)

sudo chown -R $USER /usr/local/lib/node_modules

**我强烈建议您不要将软件包管理与sudo一起使用(sudo npm -g安装一些东西),因为稍后您会遇到一些问题**

参考:http//foohack.com/2010/08/intro-to-npm/

米亚神无2020/03/13 17:46:00

TL; DR

始终使用sudo -isudo -H在运行npm install时安装全局软件包。

-

使用时,npm它将包下载到用户主目录。当您以sudo运行时,npm将文件安装到同一目录,但是现在它们由root拥有。

因此,这绝对是每个曾经使用过的人所发生的事情npm

  • 使用安装一些本地软件包没有问题 npm install foo
  • 安装全局软件包使用sudo install -g foo-cli没有问题
  • 尝试使用安装本地软件包 npm install bar
  • npm现在您必须chmod再次进入目录,这令设计师感到沮丧

sudo中使用-ior -H选项时,您的主目录将是root的主目录。任何全局安装都会将软件包缓存到/root/.npm而不是root拥有的文件中/home/me/.npm

只需始终使用sudo -isudo -H运行npm install安装全局软件包时,您的npm权限问题就会消失。

为了好

http://hood.ie/blog/why-you-shouldnt-use-sudo-with-npm.html

- QV固定的***已接受的答案npm

伽罗Mandy2020/03/13 17:46:00

建议使用其他答案将系统目录的所有权或权限更改为特定用户。我强烈反对这样做,这可能会变得很尴尬,并可能使整个系统混乱!

这是一种也支持多用户的更通用,更安全的方法。

为节点用户创建一个新组,并将所需的用户添加到该组中。然后,将节点相关文件/目录的所有权设置为此组。

# Create new group
sudo groupadd nodegrp 

# Add user to group (logname is a variable and gets replaced by the currently logged in user)
sudo usermod -a -G nodegrp `logname`

# Instant access to group without re-login
newgrp nodegrp

# Check group - nodegrp should be listed as well now
groups

# Change group of node_modules, node, npm to new group 
sudo chgrp -R nodegrp /usr/lib/node_modules/
sudo chgrp nodegrp /usr/bin/node
sudo chgrp nodegrp /usr/bin/npm

# (You may want to change a couple of more files (like grunt etc) in your /usr/bin/ directory.)

现在,您可以以用户身份轻松安装模块

npm install -g generator-angular

某些模块(grunt,bower,yo等)仍需要以root用户身份安装。这是因为它们在/ user / bin /中创建符号链接。

编辑

3年后,我建议使用Node Version Manager它可以为您节省很多时间和麻烦。

西门小宇宙2020/03/13 17:46:00

另外,您将需要node_modules目录中的写许可权

sudo chown -R $USER /usr/local/lib/node_modules
阿飞前端2020/03/13 17:46:00

小心!!! 小心!!! 小心!!!

由于存在安全风险,因此chown或chmod 不是解决方案。

而是这样做:

如果您致电,请先检查npm指向的位置:

npm config get prefix

如果返回/ usr,则可以执行以下操作:

mkdir ~/.npm-global
export NPM_CONFIG_PREFIX=~/.npm-global
export PATH=$PATH:~/.npm-global/bin

这将在您的主目录中创建一个npm-Directory并指向npm它。

要永久保留此更改,必须将export-命令添加到.bashrc中:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc
小小Eva2020/03/13 17:46:00

我在安装Recess(https://github.com/twitter/recess)来为Bootstrap 3编译CSS 时遇到了这个问题

安装凹槽时:

-npm install recess -g
  1. 您需要解锁home目录中的权限,例如Noah 所说:

    sudo chown -R `whoami` ~/.npm
    
  2. 您还需要对该node_modules目录具有写权限,如Xilo 所说,因此,如果目录仍然不起作用,请尝试:

    sudo chown -R `whoami` /usr/local/lib/node_modules
    
  3. 如果仍然看到错误,则可能还需要更正/usr/local权限

    sudo chown -R `whoami` /usr/local
    

请注意,指示在这个职位 /usr/local/是不实际的系统目录。如果你是一个Mac上,所以,这个答案其实是为Mac用户完全“安全”。但是,如果您使用的是Linux,请参阅下面的Christopher Will的答案,以获取对多用户友好的系统目录安全(但更复杂)的解决方案。

MandyL2020/03/13 17:45:59

这看起来像您的主目录中的权限问题。要回收.npm目录的所有权,执行:

sudo chown -R $(whoami) ~/.npm