npm install上超出了最大调用堆栈大小

GRO*_*X13 83 javascript node.js npm

我正在尝试运行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>
Run Code Online (Sandbox Code Playgroud)

这是以下内容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 ]
Run Code Online (Sandbox Code Playgroud)

删除node_modules了几次,并尝试重新安装.无法理解造成这种情况的原因以及如何解决这个问题.

dja*_*ude 59

metzelder的回答帮助我解决了这个问题.但是如果你运行命令npm cache clean,它会给你一个消息

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

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

所以命令是:

npm cache clean --force
Run Code Online (Sandbox Code Playgroud)

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

YYY*_*YYY 45

npm rebuild - 它解决了我的问题

  • 谁能进一步解释这个答案?为什么这可以解决问题? (17认同)
  • 删除 package-lock.json 和 npm rebuild 对我有用 (4认同)
  • 来自官方文档: &gt; 此命令在匹配的文件夹上运行 npm build 命令。当您安装新版本的节点并且必须使用新的二进制文件重新编译所有 C++ 插件时,这非常有用。 (2认同)

Мар*_*ров 23

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

rm package-lock.json
rm -r node_modules
Run Code Online (Sandbox Code Playgroud)

  • 确实如此,但如果您无法在不同的平台上安装应用程序,那么您别无选择,只能这样做。 (12认同)
  • 如果删除package-lock.json,就将其杀死。它保证您的依赖关系将是确定性的。 (5认同)
  • 无论如何,“npm install”应该恢复“package-lock.json”文件 (3认同)
  • @kip2 它将生成一个新的 `package-lock.json`,但不一定相同,因为自上次创建以来可能存在新版本的依赖项。这些新版本之一可能会破坏一些东西。 (2认同)

小智 14

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


Con*_*tra 14

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

npm install -g npm


Gop*_*i P 14

npm rebuild 肯定会工作

  • 这是做什么的以及如何解决问题? (2认同)

Uma*_*lid 10

我删除了

节点模块

然后通过重新安装

安装

它对我有用

  • 有趣的是,除了您的步骤之外,我还必须重新启动我的计算机才能正常工作,因为我正在使用 wsl (3认同)

Ara*_*chi 7

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

  1. 首先,您需要确保您的 node 和 npm 版本是最新的。如果没有,请将您的 node 和 npm 包升级到最新版本。

    nvm install 12.18.3 // update node version through node version manager
    
    npm install npm // update your npm version to latest
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除您的node_modules文件夹和package-lock.json文件。

  3. 使用以下命令强制清理整个 NPM 缓存。

    npm cache clean --force
    
    Run Code Online (Sandbox Code Playgroud)
  4. 重新安装所有依赖项。

    npm install
    
    Run Code Online (Sandbox Code Playgroud)
  5. 如果上述步骤没有解决您的问题,请在执行以下命令后尝试重新安装您的依赖项。

    npm rebuild
    
    Run Code Online (Sandbox Code Playgroud)


met*_*der 6

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

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

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

  • npm cache clean --force现在是命令,使用npm5 (3认同)

Ker*_*şcu 6

npm uninstall

npm cache clean --force
Run Code Online (Sandbox Code Playgroud)

我使用这两种方法,但没有用。在删除节点模块并再次安装npm之后,它又无法正常工作了。最后-m删除package-lock.json并在使用之后创建新的package-lock.json文件

npm install
Run Code Online (Sandbox Code Playgroud)

好吧!

  • 删除package-lock.json文件为我修复了该文件,谢谢! (4认同)

Mel*_*hia 6

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


小智 5

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


Tho*_*sma 5

总长DR

对于那些使用NVM的人,请确保您使用正确版本的NodeNPM

背景

当我开始在另一个项目中使用NVM后,我开始收到此错误。当我去运行npm install我的工作项目时,我收到此错误,指出已超出最大调用堆栈大小。

事实证明,这是由于我使用Node 12及其附带的NPM版本引起的,而我应该使用Node 16

解决方案

切换到更新版本的NodeNPM
nvm use <version>(例如,nvm use 16