npm抛出没有sudo的错误


1285

我只是通过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

35
请考虑使用NVM 的解决方案stackoverflow.com/a/24404451/1480391(而不是拥有权限的黑客入侵)
Yves M.

2
@janaspage您不能通过NPM(节点程序包管理器)安装节点或NVM(节点版本管理器),这是没有意义的。NPM位于节点内(它是同时安装的)。看一下Wikipedia页面: en.wikipedia.org/wiki/Npm_(软件)
Yves M.


在OSX和安装带有0official pkg intaller的节点下,此解决方案无效。我改用了这个:stackoverflow.com/a/34968008/675565
fmquaglia

2
它说明了问题和解决方法:docs.npmjs.com/getting-started/fixing-npm-permissions
n00b

Answers:


2268

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

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

102
我以为这whoami是一个占位符,但是它按原样按原样键入,因此它必须是我不理解的变量。
SimplGy

127
whoami是实际的shell命令,网址为en.wikipedia.org/wiki/Whoami。周围的反引号可whoami确保其正确执行,然后放入chown命令中
Noah,

13
您也可以手动指定用户名。如果您的用户名是“ simpleascouldbe”,则命令为sudo chown -R simpleascouldbe ~/.npm
Noah,

13
npm不需要也不应该使用sudo-请参阅下面的答案@HeberLZ,尤其是关于以下内容的第二个选项:
./

9
@ChristopherWill:这不会更改系统目录的所有权。这正在更改用户主目录中目录的所有权,该目录应归用户所有。
user4815162342

619

执行诸如在npm目录中写入(npm linknpm install -g,等)。

您可能使用root权限运行了节点安装,这就是为什么全局软件包安装要求您成为root用户的原因。


解决方案1:NVM

不要用权限破解,以正确的方式安装节点。

在开发机器,你不应该安装和运行具有root权限的节点,否则事情一样npm linknpm install -g需要相同的权限。

NVM(节点版本管理器)使您可以在没有root权限的情况下安装Node,还可以安装许多版本的Node来轻松使用它们。.非常适合开发。

  1. 卸载节点(可能需要root权限)。可能对您有帮助。
  2. 然后按照此页面上的说明安装NVM
  3. 通过NVM安装节点: nvm install node

现在npm linknpm install -g将不再需要您是root。

编辑:另请参阅https://docs.npmjs.com/getting-started/fixing-npm-permissions


解决方案2:为给定用户全局安装软件包

不要用权限破解,以正确的方式全局安装npm软件包。

如果您使用的是OSX或Linux,则可以为全局软件包和设置创建用户专用目录,npmnode了解如何查找全局安装的软件包。

看看这篇很棒的文章,以获取有关在不使用sudo的情况下全局安装npm模块的逐步说明。

另请参阅:npm有关修复npm权限的文档。


32
在发布的所有解决方案中,此处的NVM解决方案为我提供了最佳结果。强烈建议使用NVM,而不要玩弄权限。
wenincode 2014年

9
这些说明效果很好。但是,您可能需要在卸载nodejs之前先删除使用sudo安装的模块npm ls -gp | awk -F/ '/node_modules/ && !/node_modules.*node_modules/ {print $NF}' | xargs npm -g rm-我必须在根shell中重新安装nodejs并卸载它们,否则,您将继续拥有指向yo,grunt等的符号链接。
BrunoFlávio2014年

4
这是最好的解决方案,我首先通过sudo npm list -g --depth=0. | awk -F ' ' '{print $2}' | awk -F '@' '{print $1}' | sudo xargs npm remove -g stackoverflow.com/a/22290968/1449157卸下了所有模块,然后npm通过以下方式将其卸下并安装nvm
Fabio Antunes 2014年

3
有关节点的卸载说明,请使用此SO答案stackoverflow.com/a/11178106/480031
seangates 2015年

3
为什么可以使用root在生产计算机上安装节点?
布鲁诺·佩雷斯

400

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

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

7
以及~/tmp我的目录。
已知的

122
我不知道为什么仍然会投票。将系统目录的所有权更改为特定用户是非常糟糕的做法!请参阅下面的答案以了解其他解决方案(例如为节点用户创建单独的组)。
Christopher Will

1
我没有node_modules/usr/local/lib/。wtf?
康纳·里奇

27
无论您做什么-绝对不要在/ usr / local / lib或/ usr / lib /上运行'sudo chmod -R whoami',您将破坏sudoers文件,并且会讨厌自己。
qodeninja

7
大家,请对此投票...- Then I ran sudo chown -R $USER /* and everything was fine不-您正在毁坏机器。
commonpike

75

更改“ system-global”文件夹上的所有者是很容易的事。在全新安装中,我将NPM配置为对“用户全局”程序使用已经可写的位置

npm config set prefix ~/npm

然后确保将文件夹添加到路径:

export PATH="$PATH:$HOME/npm/bin"

参见@ErikAndreasNPM模块回答如果没有sudo以及@sindresorhus也提供set的详细循序渐进指南将无法在全局安装NPM模块 $MANPATH


我坚决同意,除非我建议您只要将前缀设置为,$HOME那么通常您的.profile脚本将在$PATH您下次获取它时(例如,下次登录时)进行处理。
杰斯·奥斯汀

@JessAustin:也许吧,但这也会给您带来更多混乱,$HOME并可能会干扰其他(将来吗?)NPM文件/子文件夹。最好将来自不同程序包管理器/语言/构建系统的二进制文件分开,并明确地设置$PATH(在登录时间脚本中)。
乔尔·普拉

嗯,混乱吗?我们只是在谈论中的全局安装模块~/lib/node_modules,以及与其相关的CLI(如果有)~/bin。对于许多用户,特别是如果他们没有根,都~/bin~/lib已经存在。
杰斯·奥斯汀

@JessAustin:这也是库和二进制文件名称冲突的问题。假设您指向NPM放入二进制文件~/bin,然后对一两个额外的程序包管理器执行同样的操作。它可能不会在今天或明天发生,但是显然存在来自不同管理器的两个程序包发生名称冲突并覆盖彼此文件的风险。对于我来说,拥有单独的前缀已经足够了。(具体示例将不胜感激。)
Joel Purra 2014年

1
这应该被认为是最佳答案。更改系统全局文件夹可能很危险。
弗拉基米尔·马顿

58

我在安装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的答案,以获取对多用户友好的系统目录安全(但更复杂)的解决方案。


35
这是一个坏主意。您可能不希望特定用户拥有系统目录。除了严重的安全问题外,这也不是多用户兼容的。
Christopher Will

2
是的,但是对于+2的开发环境来说,这是一个很好的解决方案,尤其是如果您已经安装了node.js并且只需要继续摇晃!
elliotrock 2014年

您真的不应该在自己的主目录之外拥有软件包
Ben

1
如果不在主目录中,那么它将是系统目录,尽管有相反的说法。仅仅因为OS X不使用它并不意味着它不是系统目录。
rich remer

53

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

由于存在安全风险,因此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

如果我有/ usr,我应该只切换到选项2吗?
艾伯特·劳尔

3
请注意,最后一个命令实际上输出的内容$PATH,而不是字符串本身。您应该更改它。
Veluria

1
这样解决了!谢谢。我收到“权限被拒绝,取消链接” / usr / bin / <pkg>”
valbaca

1
这是最好的答案。这是解决问题的推荐方法。
Paulo Coghi-恢复莫妮卡

为什么要增加安全风险?
弗兰克,

40

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

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

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

# 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。它可以为您节省很多时间和麻烦。


2
如果节点是由源安装的,尽管会出现多用户问题,但是所有模块都可以完美运行,而无需使用sudo。这也是非常重要的,因为在yeoman模块的情况下,人们无法通过对yeoman应用程序进行sudo来更新生成器,因为它不允许sudo执行:(
HeberLZ 2014年

1
在Linux上,我通常使用内置staff组为我的dev文件夹授予权限。另外,最好运行chmod g+ws node_modules以确保您的组具有读/写权限。
jackvsworld

@jackvsworld我不知道员工组。我想这将是一个更平滑的解决方案,因为不必创建一个新的虚拟组。但是,谢谢您的投入。
克里斯托弗·威尔

一般来说,它/usr/lib是在系统软件包管理器的控制下,您不应该在那里进行任何更改。
rich remer

23

有关如何修复错误的权限的官方文档位于https://docs.npmjs.com/getting-started/fixing-npm-permissionsnpm installEACCES

.pkg在OSX上使用安装程序重新安装节点后,我遇到了此问题。这里有一些很好的答案,但是我还没有看到npmjs.com的链接。

选项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_modulesbinshare)使用的子文件夹的权限。

选项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

1
谢谢,这个对我有用,因为皇冠的嘲笑没有。你救了我。
fmquaglia

如果我有/ usr,我应该只切换到选项2吗?
艾伯特·劳尔

我喜欢这个答案的选项2。(1)它没有使用sudo的安全漏洞,(2)它为其他用户保留体系结构,(3)它引用了文档,并且(4)它具有所需的命令行包括条目。谢谢你的添加!
汤姆·罗斯,

那么,当您安装符号链接的东西时会发生什么/usr/bin/呢?现在只有您的用户可以访问它。您以其他人身份登录,但仍然无权访问,因为这些文件实际上位于另一个用户的主目录中!
弗朗斯

很好,这个对我有用。感谢您对命令的解释。
FrankByte.com

12

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

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来自动执行上述步骤

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


2
tx进行编辑@AndyHayden :)我的首选方法在上面的注释中建议:使用NVM!stackoverflow.com/a/24404451/1480391
ptim

唯一不影响权限的对我有用的解决方案。我讨厌NPM及其愚蠢的权限愚蠢。感谢您的解决方案!
RyanNerd '18年

8

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


最佳且简单的解决方法
Manjeet Singh '18

6

我在NPM模块上遇到类似的问题,如果没有sudo将无法在全球范围内安装模块,问题是当我安装节点时,我通过chris / lea ppa repo使用sudo进行了安装

我的解决方案是卸载节点,然后以这种方式安装它:

从nodejs.org下载最新的稳定节点源#在我的情况下为node-v0.10.20.tar.gz

tar -zxf node-v0.10.20.tar.gz#解压缩源

cd node-v0.10.20#输入未压缩的文件夹

须藤chown $ USER -R / usr / local

./configure --prefix = / usr / local && make &&进行安装

PD:如果您不想更改/ usr / local文件夹的所有权,可以将其安装在您已经拥有的位置。这种方法的问题是,您将必须将安装文件夹与bash命令行绑定,以便稍后我们可以使用node命令。

mkdir〜/ opt

./configure --prefix =〜/ opt && make &&进行安装

echo'export PATH =〜/ opt / bin:$ {PATH}'>>〜/ .bashrc #or〜/ .profile或〜/ .bash_profile或〜/ .zshenv,具体取决于当前的操作系统

无论使用哪种方法,都可以在不使用sudo的情况下执行以下操作

npm install -g module_to_install


1
我最终使用了这种方法。在使用sudo chown $USER /use/local之前没有使用过。到目前为止看起来不错,是时候尝试构建原子了!谢谢!
prasanthv 2014年

6

当您运行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/


好极了!这是对我做到的!:做其他其他的上方后sudo chown -R `whoami` ~/.npmsudo chown -R `whoami` /usr/local/lib
里吉斯Zaleman

8
这可能会导致许多其他应用程序出现权限问题,因此建议您要这样做。为什么用一罐蠕虫换另一罐?
布莱德·帕克斯

1
或者至少将其优化为/ usr / local / lib / node_modules。
2014年

这个,这个,还有这个。将我的头撞在墙上之后,就成功了。+1
dashard 2015年

这是我的问题。在新的Macbook(OS x 10.10.3)上,对/ usr / local / lib / node_modules的许可权是:$ ll / usr / local / lib / node_modules总计0 drwxr-xr-x 3 24561 wheel wheel 102B Mar 31 18:19 。drwxrwxr-x 4 24561管理员136B 3月31日18:19 .. drwxr-xr-x 26 65534人员884B 4月13日10:53 npm
tkane2000

5

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

Mac OS X 10.9.4

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

    新帐户>“组”
    帐户名:nodegrp

    创建组后,勾选要包含在该组中的用户

  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


1
我必须将几个路径更改为/ usr / local / bin,但除此之外,此解决方案在OX X 10.9机器上效果很好-谢谢!
2014年

更改系统目录所有权的错误做法。
rich remer '18

@richremer我认为这取决于您要实现的目标。如果该文件夹最初只能由sudoer访问,则只能以这种方式进行更改。我们将更改限制为与npm相关的文件夹。保留sudo或更改这些文件夹组的所有权,以便普通用户可以对其进行修改,会更安全吗?如果不应让普通用户对该文件夹执行任何操作,则当然不应更改该文件夹的组所有权。

适当的做法是使用sudo安装全局软件包,但使用-H标志进行安装。特别,sudo -H npm install -g <pkg>。这样可以确保正确描述系统和用户文件夹的权限。您不需要使用sudo npm install -g,因为这会将根目录拥有的文件安装到您的用户目录中。如果npm足够聪明,可以以正确的方式执行此操作,那会很好,但是事实并非如此,因此您必须使用-Hsudo标志正确地全局安装。
rich remer

4

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

sudo chown -R $USER ~/tmp

没关系!


4

对我来说,只执行

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

而且一切正常!


您非常棒的先生:)
user805981

中的文件/usr/lib是系统文件,不应归您的个人用户帐户所有。
rich remer '18

4

问题:您(用户)对目录没有正确的权限集。

即时的解决方法是使用sudo运行npm安装,但这可能会给您同样的错误,或者安装不正确。

并且更改目录所有权不是一个不错的选择,这是一个临时补丁。


解决方案 / 建议:更改npm的默认目录(来自官方文档

继续前进之前,请备份计算机。

(可选)如果安装错误,请先将其卸载:

npm uninstall <package-name>  # use sudo if you used it while installation
npm cache verify  # or, npm cache clean for npm version below 5.x.x 
  1. 创建用于全局安装的目录:

    mkdir ~/.npm-global

  2. 配置npm以使用新的目录路径:

    npm config set prefix '~/.npm-global'

  3. 打开或创建一个~/.profile~/.bash_profile文件,然后添加以下行:

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

  4. 返回命令行,更新系统变量,或重新启动终端:

    source ~/.profile

  5. (可选)测试:不使用sudo全局下载软件包。

    npm install -g jshint


3

万一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解决权限问题


3

问题:您无权写入npm用于存储全局软件包和命令的目录。

解决方案:允许使用npm。

打开一个终端:

命令+空格键,然后输入'terminal'

输入此命令:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}
  • 注意:这需要您的密码。

该解决方案允许仅访问所需目录的权限,从而使其他目录保持良好和安全。


拒绝投票是因为设置系统文件夹的用户所有权是一种反模式,但这不能解决问题。在npm config get prefix返回主文件夹中某些内容的特殊情况下,此解决方案将修复权限,但不能解决为共享环境安全地安装全局软件包的根本问题。
rich remer

这将重写操作系统很大一部分的权限。例如,在Ubuntu中运行此命令将导致“ sudo”命令本身无法使用。
Sahand Seifi

2

要正确配置NPM,此处的另一个重要修复是运行以下命令:

npm config set prefix '~/.npm_packages'
PATH=$PATH:$HOME/.npm_packages/bin; export PATH

2

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

sudo chown -R $(whoami) /usr/local/lib/node_modules

1
我运行了此文件,并在Mac上为我工作了100%:sudo chown -R $(whoami)/ usr / local / lib / node_modules
leeroya

1

在我看来,最好的选择是npm文档中建议的选择,即首先通过运行检查默认情况下全局node_modules的安装位置npm config get prefix。如果您能像我在Trusty上所做的那样,/usr,可能会希望将其更改为一个可以安全拥有的文件夹,而不会像往常那样混乱。

为此,请在系统中选择或创建一个新文件夹。您可能希望将其放在主目录中,或者与我一样放在/usr/local同一目录下,以确保一致性,因为我也是Mac用户(根据我碰巧所处的机器,我不希望不需要查看其他位置)。这样做的另一个很好的理由是,该/usr/local文件夹可能已经在您的PATH中(除非您喜欢弄乱PATH),但是很可能您的新创建的文件夹不在,您需要将其添加到在.bash-profile.bashrc文件中将自己设置为 PATH 。

长话短说,我使用更改了全局模块的默认位置npm config set prefix '/usr/local',创建了文件夹/usr/local/lib/node_modules(它将由npm使用),并使用以下命令更改了npm使用的文件夹的权限:

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

现在,您可以安全地全局安装任何模块。希望这可以帮助!


1

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

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

1

最好的解决办法是是由故宫提供的文件。


对于Ubuntu,建议的解决方案是Option#2

简要步骤:
创建用于全局安装的目录:
mkdir ~/.npm-global

配置npm以使用新的目录路径:可以帮助您验证前缀是否已更新。结果将是<您的主目录> /。npm-global
npm config set prefix '~/.npm-global'
npm config get prefix

打开或创建〜/ .profile文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH

返回命令行,更新系统变量:
source ~/.profile

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

NPM_CONFIG_PREFIX=~/.npm-global


对于Mac,建议的解决方案是Option#3

在Mac OS上,您可以使用Homebrew软件包管理器完全避免此问题

brew install node


此NPM_CONFIG_PREFIX将不起作用。这是npm-descriptioniton中的错误。请参阅上面的文章,如何以正确的方式进行操作:stackoverflow.com/a/41395398/1256697
Suther

1

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

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

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


1

我喜欢使用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


0

在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/


1
如今,会建议我对此问题使用其他答案npm config
2014年

0

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

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

之后,npm正常工作!


0

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

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

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

希望这有助于好奇!


0

这是我利用和工作的解决方案。我尝试利用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


0

@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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.