ChatGPT解决这个技术问题 Extra ChatGPT

如何在没有 sudo 的情况下修复 npm 抛出错误

我刚刚通过 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
请考虑使用 NVM the solutionstackoverflow.com/a/24404451/1480391(而不是使用权限进行黑客攻击)
@janaspage您不能通过NPM(节点包管理器)安装节点或NVM(节点版本管理器),这是没有意义的。 NPM 位于节点内部(同时安装)。查看维基百科页面:en.wikipedia.org/wiki/Npm_(software)
最后一个比 sudo chown 更好的解决方案:github.com/sindresorhus/guides/blob/master/…
在 OSX 下并使用 0official pkg intaller 安装节点,此解决方案不起作用。我改用了这个:stackoverflow.com/a/34968008/675565

Y
Yves M.

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

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

我认为 whoami 是一个占位符,但它按字面意思输入,所以它一定是我不理解的变量。
whoami 是一个实际的 shell 命令 en.wikipedia.org/wiki/Whoamiwhoami 周围的反引号确保它被正确执行,然后放入 chown 命令
这很好,但是对于像我这样的 npm 新手来说,有一个更完整的答案。可能需要创建一个新的 /npm 目录并指向 npm 来使用它。请参阅下面 suther 的回答。
Y
Yves M.

在执行诸如写入 npm 目录npm linknpm install -g 等)之类的操作时,将需要您在安装 Node 时使用的权限。

您可能以 root 权限运行 Node.js 安装,这就是全局包安装要求您成为 root 的原因。

解决方案 1:NVM

不要破解权限,以正确的方式安装 Node.js。

在开发机器上,您不应该使用 root 权限安装和运行 Node.js,否则 npm linknpm install -g 之类的东西将需要相同的权限。

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

卸载节点(可能需要 root 权限)。这可能会帮助你。然后按照此页面上的说明安装 NVM。通过 NVM 安装节点:nvm install node

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

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

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

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

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

查看 this great article,了解有关在不使用 sudo 的情况下全局安装 npm 模块的分步说明。

另请参阅:关于 Fixing npm permissions 的 npm 文档。


在发布的所有解决方案中,这里的 NVM 解决方案为我提供了最好的结果。强烈建议使用 NVM 而不是玩弄权限。
这些解决方案都不适合我。
我从快照商店安装了节点,但我无法运行像 npm install -g 这样的命令。但是在尝试了 NVM 解决方案之后,一切都很顺利。非常感谢您的回答。
Y
Yves M.

此外,您还需要 node_modules 目录中的写入权限:

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

我不知道为什么这仍然得到赞成。将系统目录的所有权更改为特定用户是一种非常糟糕的做法!请参阅下面的答案以了解其他解决方案(例如为节点用户创建单独的组)。
无论你做什么——绝对不要在 /usr/local/lib 或 /usr/lib/ 上运行 'sudo chmod -R whoami',你会毁掉你的 sudoers 文件,你会讨厌自己。
我一直在更改仅节点内容的权限,直到出现无法安装手册页的错误...就像神圣的^%$#我无法更改那里的权限,因为这不仅仅影响节点!
J
Joel Purra

更改“系统全局”文件夹的所有者是一种黑客行为。在全新安装时,我会为“用户全局”程序configure NPM to use an already writable location

npm config set prefix "${HOME}/npm"

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

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

请参阅 @ErikAndreas' answerNPM modules won't install globally without sudo,以及 @sindresorhus 的 longer step-by-step guide,还设置了 $MANPATH


只是要注意当前版本节点的实际路径应该是 .npm.npm/bin
@ChrisRutherford:您可以看到路径是可配置的,因此它可以是您想要的任何可访问路径。选择在此答案/示例中使用点名,这既是因为 ~/.npm 会与原始问题中的“损坏”目录发生冲突,而且因为使用隐藏目录(至少在默认情况下)在 *nix 系统上)当您“只想让事情正常工作”并继续您的一天时,将更难调试。
Y
Yves M.

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

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

而是这样做,做:

首先检查 npm 指向的位置,如果您调用:

npm config get prefix

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

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

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

要使此更改永久生效,您必须将导出命令添加到您的 .bashrc:

echo -e "export NPM_CONFIG_PREFIX=~/.npm-global\nexport PATH=\$PATH:~/.npm-global/bin" >> ~/.bashrc

这是 IMO 的最佳解决方案 - 避免弄乱系统目录所有权。使用 sudo 安装也可能导致进一步的权利问题(因为东西可能最终也归 root 所有......)
那么如何处理已经在全球范围内安装的东西呢?特别是如果其中一些是旧的而其他东西取决于那个特定的版本?
C
Community

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

安装凹槽时:

-npm install recess -g

你需要在你的主目录中解锁权限,就像 Noah 说的: sudo chown -R `whoami` ~/.npm 你还需要对 node_modules 目录的写权限,就像 Xilo 说的那样,所以如果它仍然不起作用,请尝试: sudo chown -R `whoami` /usr/local/lib/node_modules 如果您仍然看到错误,您可能还需要更正 /usr/local 权限: sudo chown -R `whoami` /usr/local

请注意,如果您使用的是 Mac,in this post /usr/local/ 实际上并不是系统目录,因此,对于 Mac 用户来说,这个答案实际上是完全“安全的”。但是,如果您使用的是 Linux,请参阅下面 Christopher Will 的答案,了解多用户友好、系统目录安全(但更复杂)的解决方案。


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

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

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

为 node-users 创建一个新组并将所需的用户添加到该组。然后将依赖于节点的文件/目录的所有权设置为该组。

# 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/ 中创建符号链接。

编辑

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


如果 node 是通过源安装的,尽管多用户会是一个问题,但所有模块都可以在不使用 sudo 的情况下完美运行。这也很重要,因为在 yeoman 模块的情况下,人们无法通过 sudo yeoman 应用程序更新生成器,因为它不允许执行 sudo :(
在 Linux 上,我通常使用内置的 staff 组来授予对我的开发文件夹的权限。此外,最好运行 chmod g+ws node_modules 以确保您的组具有读/写权限。
H
HoppyKamper

关于如何通过 EACCES 错误修复 npm install 权限的官方文档位于 https://docs.npmjs.com/getting-started/fixing-npm-permissions

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

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


谢谢,这个对我有用,因为 chown soludion 没有。你救了我。
我喜欢这个答案的选项 2。(1)它没有使用 sudo 的安全漏洞,(2)它为其他用户保留架构,(3)它引用文档,并且(4)它具有所需的命令行包括的条目。谢谢你的添加!
那么当您安装符号链接到 /usr/bin/ 的东西时会发生什么?现在只有您的用户可以访问它。您以其他人身份登录,仍然无法访问,因为文件实际上位于另一个用户的主目录中!
d
dev0experiment

我遇到了这个问题,虽然 ~/.npm 确实应该归您的用户所有,但 npm 并没有在那里安装模块。

真正解决我的问题的是这些命令:

npm config set prefix ~/.npm
export PATH="$PATH:$HOME/.npm/bin"

它将确保您的所有全局安装都将使用此前缀。重要的是您的用户拥有该目录。


我必须在 Ubuntu 20.04 上做同样的事情。
这有助于使用 Ubuntu 20.04 的 WSL。谢谢!
A
Andy Hayden

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

Sindre Sorus 有一个指南 Install npm packages globally without sudo on OS X and Linux 概述了如何干净地安装而不会弄乱权限:

这是一种为给定用户全局安装软件包的方法。为你的全局包创建一个目录 mkdir "${HOME}/.npm-packages" 参考这个目录以备将来在你的 .bashrc/.zshrc 中使用: NPM_PACKAGES="${HOME}/.npm-packages" 指示 npm where存储您的全局安装包。在您的 $HOME/.npmrc 文件中添加:prefix=${HOME}/.npm-packages 确保节点会找到它们。将以下内容添加到您的 .bashrc/.zshrc: NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH" 确保您会找到已安装的二进制文件和手册页。将以下内容添加到您的 .bashrc/.zshrc: PATH="$NPM_PACKAGES/bin:$PATH" # 取消设置 manpath,以便我们可以通过 `manpath` 从 /etc/manpath 继承 # 命令 unset MANPATH # 如果您已经修改了 MANPATH,请删除在您的配置中的其他地方 MANPATH="$NPM_PACKAGES/share/man:$(manpath)" 查看 npm-g_nosudo 自动执行上述步骤

查看 source of this guide 了解最新更新。


tx 用于编辑@AndyHayden :) 上面的评论中建议了我的首选方法:使用 NVM! stackoverflow.com/a/24404451/1480391
唯一对我有用的解决方案不涉及使用权限。我讨厌 NPM 及其愚蠢的权限愚蠢。感谢您的解决方案!
r
rich remer

TL;博士

运行 npm install 安装全局包时,始终使用 sudo -i 或 sudo -H。

当您使用 npm 时,它会将软件包下载到您的用户主目录。当您以 sudo 运行时,npm 将文件安装到同一目录,但现在它们归根用户所有。

所以这绝对是每个曾经使用过 npm 的人都会发生的事情:

使用 npm install foo 安装一些本地软件包没有问题

使用 sudo install -g foo-cli 安装全局包没有问题

尝试使用 npm install bar 安装本地包

对 npm 设计者感到沮丧,因为您必须再次对目录进行 chmod

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

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

为了好。

-- qv 已被接受的解决已经搞砸的 npm 的答案。


最好和简单的修复
仅供参考,最后一个链接现在似乎已断开。
J
Juancarlos Rodríguez

当您运行 npm install -g somepackage 时,您可能会收到 EACCES 错误,要求您以 root/管理员身份再次运行该命令。这是权限问题。

很容易修复,打开你的终端(应用程序>实用程序>终端)

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

** 我强烈建议你不要使用 sudo 进行包管理(sudo npm -g install something),因为以后可能会遇到一些问题**

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


耶!这个对我做了!在完成上述其他其他操作后:sudo chown -R `whoami` ~/.npmsudo chown -R `whoami` /usr/local/lib
这可能会导致许多其他应用程序出现权限问题,所以我建议不要这样做。为什么要用一罐蠕虫换另一罐?
或者至少将其细化为 /usr/local/lib/node_modules。
这个,这个,还有更多。在我的头撞到墙上之后,这成功了。 +1
这是我的问题。在新的 macbook (os x 10.10.3) 上,/usr/local/lib/node_modules 的权限为: $ ll /usr/local/lib/node_modules total 0 drwxr-xr-x 3 24561 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
C
Community

我在 NPM modules won't install globally without sudo 遇到了类似的问题,问题是 当我安装节点时,我通过 chris/lea ppa repo 使用 sudo 完成了它

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

从 nodejs.org #in my case node-v0.10.20.tar.gz 下载最新的稳定节点源

tar -zxf node-v0.10.20.tar.gz #uncompress sources cd node-v0.10.20 #enter uncompressed folder sudo chown $USER -R /usr/local ./configure --prefix=/usr/local && make && make安装

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

mkdir ~/opt ./configure --prefix=~/opt && make && make install echo 'export PATH=~/opt/bin:${PATH}' >> ~/.bashrc #or ~/.profile 或 ~/ .bash_profile 或 ~/.zshenv 取决于当前的操作系统

使用其中任何一种方法,您都可以在不使用 sudo 的情况下执行以下操作

npm install -g module_to_install


我最终使用了这种方法。在构建之前使用过 sudo chown $USER /use/local。到目前为止看起来不错,是时候尝试构建 atom 了!谢谢!
k
ken

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

Mac OS X 10.9.4

System Preference > Users & Groups > (unlock) > press + : New Account > "Group" Account Name : nodegrp 创建组后,勾选要包含在该组中的用户 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


我不得不更改几个到 /usr/local/bin 的路径,但除此之外,这个解决方案在我的 OX X 10.9 机器上运行良好 - 谢谢!
更改系统目录所有权的不良做法。
@richremer 我认为这取决于您要实现的目标。如果该文件夹最初只能由 sudoer 访问,则只能以这种方式更改它。我们将更改限制为与 npm 相关的文件夹。保留 do sudo 或更改那些文件夹组所有权以便普通用户可以修改它会更安全吗?如果普通用户不应该对此文件夹执行任何操作,那么当然不应该更改文件夹的组所有权。
适当的做法是使用 sudo 安装全局包,但使用 -H 标志。具体来说,sudo -H npm install -g <pkg>。这可确保正确描述系统和用户文件夹的权限。您不想使用 sudo npm install -g,因为这会将 root 拥有的文件安装到您的用户目录中。如果 npm 足够聪明以正确的方式执行此操作,那就太好了,但事实并非如此,因此您必须使用 -H sudo 标志才能在全局范围内正确安装。
u
user3753202

对我来说,只执行

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

一切正常!


你真是太棒了先生:)
/usr/lib 中的文件是系统文件,不应归您的个人用户帐户所有。
N
Nabeel Ahmed

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

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

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

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

在继续之前备份您的计算机。

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

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 

为全局安装创建一个目录: mkdir ~/.npm-global 配置 npm 以使用新目录路径: npm config set prefix '~/.npm-global' 打开或创建一个 ~/.profile 或 ~/.bash_profile 文件并添加这一行: export PATH=~/.npm-global/bin:$PATH 回到命令行,更新你的系统变量,或者重启终端: source ~/.profile (可选) 测试:不使用全局下载一个包须藤。 npm install -g jshint


b
bnPYSse

就我而言,这是因为 ~/tmp 的许可。所以我这样做:

sudo chown -R $USER ~/tmp

没关系!


E
Ericgit

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

解决方案:允许 npm 的权限。

打开一个终端:

命令 + 空格键然后输入“终端”

输入此命令:

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

注意:这将需要您的密码。

此解决方案仅允许对所需目录的权限,使其他目录保持良好和安全。


否决,因为设置系统文件夹的用户所有权是一种反模式,这并不能说明这一点。在 npm config get prefix 在主文件夹中返回某些内容的特殊情况下,此解决方案将修复权限,但不会解决以安全方式为共享环境安装全局包的潜在问题。
这将重写操作系统很大一部分的权限。例如,在 Ubuntu 中运行它会导致“sudo”命令本身变得不可用。
更改 sudo 权限是一个很大的问题!
A
Amr Labib

如果 sudo chown -R $(whoami) ~/.npm 不适合您,或者您需要非终端命令解决方案。

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

打开 finder 并按 cmd + shift + g 这将打开 go to folder with url 写入以下路径 /usr/local/lib/node_modules 并按 go 右键单击 node_modules 文件夹并选择 Get Info 向下滚动到共享和权限部分解锁到能够做出改变。按 + 并添加您的用户帐户确保您在权限下拉列表中选择读取和写入

现在您应该能够在没有 sudo 的情况下安装软件包并且应该解决权限问题


B
Baraja Swargiary

简单地尝试

npm rebuild

然后在完成后运行你常用的命令


g
glemiere

正确配置 NPM 的另一个很好的修复方法是运行以下命令:

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

H
Himanshu

最佳解决方案是 npm 文档提供的 this

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

简要步骤:
为全局安装创建一个目录:
mkdir ~/.npm-global

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

打开或创建一个 ~/.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 描述中的错误。请参阅我上面的帖子,如何以正确的方式进行操作:stackoverflow.com/a/41395398/1256697
A
Adeojo Emmanuel IMM

你可以试试这个,适用于 ubuntu 和 mac

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

我在 Mac 上运行了这个并为我工作了 100%: sudo chown -R $(whoami) /usr/local/lib/node_modules
T
Tofandel

没有人提到这一点,但实际上不需要弄乱权限或单独安装 npm,只需为命令指定不同的缓存文件夹即可解决问题

npm install --cache .npm
npm run build --cache .npm

这将创建一个本地 .npm 文件夹


y
yago

在我看来,最好的选择是 npm documentation 中建议的选项,即首先通过运行 npm config get prefix 检查全局 node_modules 的默认安装位置。如果您像我在 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}

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


K
KCaradonna

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

转到你的 nodejs 安装(通常是 C:\Program Files\nodejs)

右键单击 node_modules 文件夹并转到属性

单击安全选项卡和高级

在顶部您将看到“所有者:SYSTEM”,单击更改

输入您想要权限的用户,然后单击确定

选中高级设置底部的框“将所有子对象权限条目替换为此对象的可继承权限条目”,然后单击确定

做任何你需要的 npm 安装/更新


S
Salem

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

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

用你的用户名和组改变我。


G
Gitesh Dalal

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

首先使用 apt-get 安装 nodejs 和 npm sudo apt-get update && sudo apt-get install nodejs npm 找出谁登录了即用户名,运行以下命令在终端中查看它 whoami 你可以看到你分配的组列表通过使用一个非常简单的命令,通常第一组是您的用户名本身 groups 运行以下以允许访问登录用户 sudo chmod 777 -R /usr/local && sudo chgrp $(whoami) -R /usr/local 更新 npm 和nodejs npm 安装 -g npm

你准备好了,你的用户可以在没有 sudo 的情况下运行 npm 命令

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


J
JHM16

安装软件包时使用以下命令

 sudo npm install --unsafe-perm=true --allow-root

s
sam100rav

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

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

之后 npm 工作正常!