ChatGPT解决这个技术问题 Extra ChatGPT

npm install 超过了最大调用堆栈大小

我正在尝试运行 npm install,这是控制台的输出:

npm ERR! Linux 4.8.0-27-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8

npm ERR! Maximum call stack size exceeded
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

这是 npm-debug.log 的内容:

113791 verbose stack RangeError: Maximum call stack size exceeded
113791 verbose stack     at Object.color (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/console-control-strings/index.js:115:32)
113791 verbose stack     at EventEmitter.log._format (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:252:51)
113791 verbose stack     at EventEmitter.<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/log.js:138:24)
113791 verbose stack     at emitThree (events.js:116:13)
113791 verbose stack     at emit (events.js:194:7)
113791 verbose stack     at .<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet/tracker-group.js:23:18)
113791 verbose stack     at emitThree (events.js:116:13)
113791 verbose stack     at emit (events.js:194:7)
113791 verbose stack     at .<anonymous> (/usr/lib/node_modules/npm/node_modules/npmlog/node_modules/are-we-there-yet/tracker-group.js:23:18)
113791 verbose stack     at emitThree (events.js:116:13)
113791 verbose stack     at emit (events.js:194:7)
113792 verbose cwd /home/giorgi/AdMove/dev/web-advertiser-admove
113793 error Linux 4.8.0-27-generic
113794 error argv "/usr/bin/nodejs" "/usr/bin/npm" "install"
113795 error node v6.9.1
113796 error npm  v3.10.8
113797 error Maximum call stack size exceeded
113798 error If you need help, you may report this error at:
113798 error     <https://github.com/npm/npm/issues>
113799 verbose exit [ 1, true ]

多次删除 node_modules 并尝试重新安装。无法理解导致此问题的原因以及如何解决它。

首先,我会检查 github 问题链接是否存在类似问题,如果不是已知问题,请添加它。另外,你为什么要安装 v4.2.6?当前最新版本为 v7.1.0,推荐稳定版本为 v6.9.1。清除所有内容,尝试 6.9.1,然后更新问题。
更新到 v6.9.1 仍然有同样的错误并且也更新了问题。还是谢谢TheEnvironmentalist
这里有一些建议github.com/npm/npm/issues/10776
我的情况是,这是由于 package.json 中的递归声明引起的;)
就我而言,这是因为我失去了互联网连接

G
G-Ram

metzelder's answer 帮助我解决了这个问题。但是,如果您运行命令 npm cache clean,它会给您一条消息

从 npm@5 开始,npm 缓存从损坏问题中自我修复,并且从缓存中提取的数据保证有效

因此,从 npm5 开始,您可以通过在命令中添加 --force 标志来实现。

所以命令是:

npm cache clean --force

至于我,我已将当前工作目录移动到另一个文件夹 - 似乎它混淆了 npm。删除 node_modules 并重新安装就可以了
@MetaGuru 请解释运行此命令的后果是什么...
@CTS_AE 我不认为 npm 团队将该消息添加为玩笑。一定有后果,应该有人解释。
@cdalxndr 我是说它是作为笑话/讽刺的评论留下的,作为 npm 的直接引用,他并没有真正添加任何有用的东西,但此时更多的是一个模因。您可以在此处阅读有关实际命令的更多信息:docs.npmjs.com/cli-commands/cache.html 它明确解释了力的作用;现在所有缓存项都已完全验证其完整性,如果某些内容已损坏,它将自我修复,因此缓存应始终处于正确状态并且永远不会清除,除非您尝试回收磁盘空间,因此您需要追加--force。注意:可能因版本而异。
TLDR;它实际上会像预期的那样删除缓存。在重新缓存之前,以后的依赖项安装可能会变慢。
J
João Marcos Gris

npm rebuild 它解决了我的问题


谁能进一步解释这个答案?为什么这能解决问题?
删除 package-lock.json 和 npm rebuild 对我有用
就我而言,我的 .npm 文件夹中的某些文件以 root 身份安装。 npm cache verify 告诉你出了什么问题。
这成功了。 npm cache clean 在这种情况下不起作用。
来自官方文档: > 此命令在匹配的文件夹上运行 npm build 命令。这在您安装新版本的节点时很有用,并且必须使用新的二进制文件重新编译所有 C++ 插件。
b
bobbyz

尝试删除 package-lock.jsonnode_modules 文件夹:

rm package-lock.json
rm -r node_modules

如果你删除它,你正在扼杀 package-lock.json 的目的。它保证您的依赖关系是确定性的。
没错,但是如果您无法在不同的平台上安装您的应用程序,那么您别无选择,只能这样做。
npm install 应该恢复 package-lock.json 文件
FWIW,这些命令应该在您的 functions 文件夹中运行。我犯了在根文件夹中运行它的错误
@kip2 它将生成一个新的 package-lock.json,但不一定与自上次创建以来可用的新版本依赖项相同。这些新版本之一可能会破坏事情。
M
Michael Mior
npm uninstall

npm cache clean --force

我尝试了这两种方法,但没有奏效。之后,我删除了 node_modules 目录并再次运行 npm install,它仍然不起作用。最后,我删除了 package-lock.json 并使用创建了一个新的 package-lock.json 文件

npm install

删除 package-lock.json 文件为我修复了它,谢谢!
我当然希望你知道你在做什么。
你不必这样做。 @易卜拉欣沙玛
这个也帮了我,谢谢
R
Rene Knop

我对 npm install 有同样的问题。经过大量搜索,我发现删除您的 .npmrc 文件或其内容(在 %USERPROFILE%/.npmrc 找到)将解决此问题。这对我有用。


K
Kesav Sundar M

我通过执行以下操作克服了这个问题:

删除 npm 依赖项的所有内容。您可以根据此线程找到默认安装位置:https://stackoverflow.com/a/5926706/1850297

在运行 npm install 命令之前,我建议运行 npm cache clean --force


来自 npm cache clean 的消息:“从 npm@5 开始,npm 缓存可以从损坏问题中自我修复,并且保证从缓存中提取的数据是有效的。”
G
Gopi P

npm rebuild 肯定会工作


这是做什么的,它是如何解决问题的?
A
AvantContra

就我而言,更新到最新版本:

npm install -g npm


U
Umair Khalid

我删除了

节点模块

然后重新安装

npm 安装

它对我有用


有趣的是我不得不重新启动我的电脑,除了你的步骤才能工作,因为我正在使用 wsl
这对我有用,但其他解决方案都没有
@Avshalom 这个!对于所有使用 WSL2 遇到此问题的人!
A
Aravinda Meewalaarachchi

我也遇到了同样的问题,这就是我解决它的方法。

首先,您需要确保您的 node 和 npm 版本是最新的。如果不是,请将您的节点和 npm 包升级到最新版本。 nvm install 12.18.3 // 通过节点版本管理器更新节点版本 npm install npm // 将你的 npm 版本更新到最新删除你的 node_modules 文件夹和 package-lock.json 文件。使用以下命令强制清理整个 NPM 缓存。 npm cache clean --force 重新安装所有依赖项。 npm install 如果上述步骤没有解决您的问题,请在执行以下命令后尝试重新安装您的依赖项。 npm 重建


我无法删除 node_modules。我已经发生过两次了。第一次我必须删除 npm eject,但我仍然有一些文件夹我永远无法删除 common-tagsreact-dev-utilsstream-browserify
M
Melchia

如果您尝试安装不存在的软件包或尝试安装不存在的版本,也会发生此问题。


M
MetaSean

npm cache clean 返回以下消息 从 npm@5 开始,npm 缓存从损坏问题中自我修复,并且保证从缓存中提取的数据是有效的。如果您想确保一切一致,请改用“npm cache verify”。另一方面,如果您正在调试安装程序的问题,您可以使用 npm install --cache /tmp/empty-cache 来使用临时缓存而不是核对实际缓存。

如果您按照上面的说明运行 npm cache verify,那么它实际上会运行缓存验证和垃圾回收来解决问题。

缓存验证和压缩 (~\AppData\Roaming\npm-cache_cacache): 内容验证: 6183 (447214684 字节) 内容垃圾收集: 16 (653745 字节) 索引条目: 9633


这对我来说已经足够了。 npm cache verify 以删除 node_modules 没有解决的问题。 (而且我不会破坏缓存或 package-lock.json)。不过,很确定这是 npm 的问题。不明白为什么 npm cache verify 如果它真的自我修复会改变任何东西。
d
danieltan95

对我来说发生在 docker (node:15-buster) 中。

请记住使用 WORKDIR /<folder>,以免它与安装的原始 npm 库冲突。

该文件夹可以是系统文件夹以外的任何内容,因此包括使用 /


在将 WORKDIR 行移到 Dockerfile 顶部附近之前,我在 docker 中遇到了“超出调用堆栈大小”的问题。显然那条线的位置很重要。
我在顶部有 WORKDIR /,但似乎从 / 执行 npm inpm ci 会炸毁事情。
@PaulRobello 是的,该文件夹必须与原始文件夹分开,让我编辑答案以使其更清晰。
M
Michael Mior

如果这些答案都不适合您,可能是因为您使用的终端不正确/您的 node_modules 被您计算机的另一部分使用。

就我而言,当我执行 sudo npm i 时,我一直在此错误(超出最大调用堆栈大小)和访问错误事件之间进行权衡。

解决方法是关闭我的 IDE(即 WebStorm),在基本终端中运行 npm i,仅此而已。


关闭编辑器为我修复了它。 (Netbeans 为我)
n
naorz

我不是 Windows 用户,所以如果您是,请尝试检查 Rene Knop comment

对于 Unix/OSX 用户,我已删除根 .npmrc 文件 ~/.npmrc
在您尝试之前,请< /strong>,检查那里是否没有必要的东西,您可以使用此命令将所有内容带入您的终端:cat ~/.npmrc

如果你有类似的东西:

cat: /Users/$USER/.npmrc: No such file or directory

保存副本:

cp ~/.npmrc ~/.npmrc_copy

现在,尝试删除它(适用于 bash 用户:Unix / Ubuntu / OSX ...):

rm -f ~/.npmrc

这对我有用。希望这对其他人有帮助。


p
pavlkara1

我也有同样的问题。我曾尝试过以前的解决方案,但对我来说解决方案要简单得多。我只需要删除目录中的空间,然后再次运行 npm i

感谢:https://github.com/nodejs/node-gyp/issues/809#issuecomment-155019383 指出这一点。


w
wolfyuk

在我的例子中,我有一个自定义 .npmrc 文件,其中包含一个用于通过私有 npm 注册表进行身份验证的身份验证令牌。

令牌已过期,这有助于在本地返回 code E401: Incorrect or missing password,但从 CI 构建返回 ERR! Maximum call stack size exceeded


G
Gajendra K S

您卸载 npm 包并强制清理缓存并关闭终端并重新安装任何包。

$sudo npm uninstall <package - name>
$sudo npm cache clean --force

然后重新启动终端并检查

仍然无法将 npm 和 node 都升级到最新版本


j
jjmerelo

一般来说,一旦安装了模块,使用 npm ci 而不是 npm install 会方便得多。请在生产环境中查看 this SO answer for the advantages of the former with respect to the later。所以请运行

npm ci

所有依赖项都会更新,问题就会消失。或者在一个和另一个之间有一些严重的不同步的情况下它会出错。


j
jaihind

大多数情况下,如果您使用的是您工作的组织提供的系统,并且它的 vpn 限制了此命令的使用,则会出现此问题。在这种情况下,您可以尝试断开与组织 vpn 的连接,然后执行此命令。


C
Caleb Spindler

我想尽一切办法在我的 Mac 上解决这个问题。我认为问题开始于我已经从 Node.js 下载 npm,然后使用 Homebrew 重新安装它,同时跟随 Team Treehouse 视频。

这是我尝试过的:

来自https://docs.npmjs.com/misc/removing-npm

sudo npm uninstall npm -g
sudo make uninstall
sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/npm*

来自How do I completely uninstall Node.js, and reinstall from beginning (Mac OS X)

sudo rm -rf /usr/local/{lib/node{,/.npm,_modules},bin,share/man}/{npm*,node*,man1/node*}

这是有效的:

最后,唯一对我有用的是从 GitHub 克隆 npm-reinstall 存储库,它完全删除了我 Mac 上与 npm 相关的所有内容。

https://github.com/brock/node-reinstall

然后我不得不从 Node.js 重新安装 node 和 npm。


R
Rajashekhar Reddy

我想尽一切办法在我的 Windows 7 机器上解决这个问题,比如

重新安装和重建 npm

最后,我浪费了一整天的时间来解决这个小的配置设置问题。

我是如何解决这个问题的

在全局 .npmrc 中删除我的项目特定配置,例如 drive:/Windows/Users/../.npmrc


H
Hidayat Arghandabi

我解决了它 100% 我在 gulp 版本中遇到了这个问题:3.5.6。

您应该清理 package-lock.js,然后运行 npm install 并且它可以正常工作


J
Joshua Barker

我们公司的开发环境使用 Artifactory 作为我们 NPM 依赖项的默认注册表,并且在运行 npm install 时它默认为这个,这不起作用......因此通过 npm install --registry https://registry.npmjs.org 手动指定主 npm 注册表修复了这个问题为了我...


J
Jeff Hampton

今天我们在运行 npm prune 时遇到了这个错误,即使在运行 npm cache clean --force 之后

版本:

node 13.8.0 
npm 6.13.6

删除 package-lock.json 也适用于这种情况。谢谢你们!


S
Shrivathsa

我遇到了同样的错误,我试图将 jest 安装到 monorepo 项目中的一个包中。

如果您使用 Yarn + Learna 打包 monorepo 项目,则必须导航到目标包内的 package.json,然后运行 npm installnpm install <package name>


S
Spixz

我不知道为什么,但我用 sudo 运行了 npm install,它起作用了。

sudo npm install

F
Finchy70

我遇到了这个问题,这是由于我的 git 可执行文件的升级。我回滚到 Git-2.21.0.rc1.windows.1-64-bit 并将其添加到我的环境路径中,它解决了我的问题。


b
bildungsroman

最终在 Mac 上对我有用的一件事是使用 NVM 从节点 8.12 升级到 10.x。

我用 NVM 卸载了所有其他版本的 Node,然后安装了 10.x,然后运行 nvm alias default node,它告诉 NVM 始终默认为 shell 上最新的可用节点版本。

在那之后,我的实时重新加载问题就消失了!


v
vgaltes

切换到纱线为我解决了这个问题。