【问题标题】:Maximum call stack size exceeded on npm installnpm install 超过了最大调用堆栈大小
【发布时间】:2017-03-26 18:26:23
【问题描述】:

我正在尝试运行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 中的递归声明引起的;)
  • 就我而言,这是因为我失去了互联网连接

标签: javascript node.js npm


【解决方案1】:

我尝试了此线程中的所有建议,但没有一个有效,当我运行“npm install”时,我不断收到RangeError: Maximum call stack size exceeded。我决定直接运行npm start,它启动成功,没有错误...

【讨论】:

    【解决方案2】:

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

    sudo npm install
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        先试试这个!

        再次运行npm install

        非常简单,但我不知道还有谁尝试过这个,所以我想我应该把它放在这里,尽管有所有现有的答案。我建议人们首先尝试一下,因为它是最简单的解决方案,并且不会带来其他人在删除 package-lock.json 时注意到的风险

        理论:

        这是完全未经证实的,因为我这样做只是为了运行代码屏幕(即对我来说是一个全新的 repo),我猜想在第一次运行 npm install 时已经安装了一些软件包;只是后来资源用完了。

        我猜如果我再次运行npm install,它将跳过现在安装的软件包的安装并完成,或者至少更进一步。我猜测的行为是我看到的,但我实际上并没有调试或测试这种行为是否是出于我猜测的原因!

        显然,许多不同的事情对不同的人都有效,但我认为我应该在这个已经得到很好回答的问题上添加一个答案,因为它是最微不足道的。

        如果你幸运的话,它会运行足够长的时间让你抓住一个?或☕?

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

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

            解决方法是关闭我的 IDE(即 WebStorm),在基本终端中运行 npm i,就是这样。

            【讨论】:

            • 关闭编辑器为我修复了它。 (Netbeans 为我)
            【解决方案7】:
            npm uninstall
            
            npm cache clean --force
            

            我尝试了这两种方法,但没有奏效。之后,我删除了node_modules目录,再次运行npm install,还是不行。最后,我删除了package-lock.json 并使用

            创建了一个新的package-lock.json 文件
            npm install
            

            【讨论】:

            • 删除 package-lock.json 文件为我解决了这个问题,谢谢!
            • 我当然希望你知道你在做什么。
            • 您不必这样做。 @Ibrahimshamma
            • 这个也帮了我,谢谢
            【解决方案8】:

            尝试删除 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,但不一定与自上次创建以来可能可用的新版本依赖项相同。这些新版本之一可能会破坏一些东西。
            【解决方案9】:
            rm -rf node_modules
            

            然后重新安装对我有用。

            注意:可能不需要撕掉你的锁定文件

            【讨论】:

              【解决方案10】:

              我遇到了这个问题,结果我在node_modules 中有一个符号链接,指向它的父级,即

              [user@localhost]$ ls -la /path/to/project/node_modules
              total 3272
              ...
              lrwxrwxrwx   1 user user  50 Nov 26 18:38 node_modules -> ../node_modules
              ...
              

              我的意思是,不知何故我弄乱了 bash 脚本,它创建了一个循环符号链接。删除符号链接解决了这个问题。

              【讨论】:

                【解决方案11】:

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

                记得使用WORKDIR /&lt;folder&gt;,这样就不会和原来安装的npm库冲突了。

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

                【讨论】:

                • 我在 docker 中遇到了“超出调用堆栈大小”的问题,直到我将 WORKDIR 行移到 Dockerfile 顶部附近。显然这条线的位置很重要。
                • 我在顶部有WORKDIR /,但似乎从/ 执行npm inpm ci 会搞砸事情。
                • @PaulRobello 是的,该文件夹必须与原始文件夹分开,让我编辑答案更清楚。
                【解决方案12】:

                npm rebuild 肯定会工作

                【讨论】:

                • 这有什么作用以及如何解决问题?
                【解决方案13】:

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

                npm ci
                

                所有依赖都会更新,问题就会消失。否则,如果一个和另一个之间存在严重的不同步,它就会出错。

                【讨论】:

                  【解决方案14】:

                  In my case Maximum call stack size exceeded 之前是由另一个错误触发的。日志如下所示:

                  // ... skipping some deprecation warnings
                  
                  > core-js@3.6.5 postinstall /root/.nvm/versions/node/v14.10.0/lib/node_modules/@aws-amplify/cli/node_modules/amplify-graphql-types-generator/node_modules/core-js
                  > node -e "try{require('./postinstall')}catch(e){}"
                  
                  sh: 1: node: Permission denied
                  npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@~2.1.2 (node_modules/@aws-amplify/cli/node_modules/chokidar/node_modules/fsevents):
                  npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
                  
                  npm ERR! Maximum call stack size exceeded
                  
                  npm ERR! A complete log of this run can be found in:
                  npm ERR!     /root/.npm/_logs/2020-09-10T14_10_28_397Z-debug.log
                  

                  请注意 sh: 1: node: Permission denied 引导我访问 https://forum.vuejs.org/t/cannot-install-vue-cli-permission-error-in-require-postinstall/82017/7

                  我必须将 --unsafe-perm 添加到安装命令并以 root 身份运行:

                  sudo npm install -g --unsafe-perm @aws-amplify/cli
                  

                  【讨论】:

                  • 它适用于我在 Windows WSL 子系统上使用 npm。 npm install --unsafe-perm
                  【解决方案15】:

                  错误消息可能与您尝试运行的 npm 过程没有直接关系,可能是其他节点进程运行冲突或耗尽资源。

                  在我的情况下,我有一个空的 node_modules 文件夹,它是从最近的初始化中新鲜出来的,但仍然得到

                  npm 错误!超出最大调用堆栈大小

                  在为 WordPress 插件开发运行 npm install --save-dev @wordpress/scripts 时。

                  问题是在我的 wp-content 文件夹中运行的实时重新加载观察程序,导致安装第一次停止工作。

                  【讨论】:

                    【解决方案16】:

                    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 如果真的进行自我修复会改变任何东西。
                    【解决方案17】:

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

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

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

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

                      npm cache clean --force
                      
                    4. 重新安装所有依赖项。

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

                      npm rebuild
                      

                    【讨论】:

                    • 我无法删除 node_modules。我已经发生过两次了。第一次我必须npm eject,但我仍然有一些文件夹我永远无法删除common-tagsreact-dev-utilsstream-browserify
                    【解决方案18】:
                    npm cache clean --force
                    

                    这适用于节点 8 和 npm 6+

                    【讨论】:

                      【解决方案19】:
                      echo 65536 | sudo tee -a /proc/sys/fs/inotify/max_user_watches
                      

                      在 Ubuntu 上为我工作。

                      【讨论】:

                        【解决方案20】:

                        以下步骤帮助我解决了这个问题:

                        1. 停止所有反应条(例如开始构建)
                        2. 运行npm cache clean --force
                        3. 运行npm install

                        【讨论】:

                          【解决方案21】:

                          我遇到了同样的问题,但就我而言,我从一开始就一直在使用yarn,但是从一些包自述文件中我复制了npm install 命令并得到了这个错误。后来发现yarn add &lt;package-name&gt;解决了这个问题,安装包了。

                          它可能会在将来帮助某人。

                          【讨论】:

                            【解决方案22】:

                            我遇到了类似的错误。我追踪到 npm 无法从 .bin 文件夹中删除 npm 链接文件夹的文件这一事实。所以我进入并 rm -rf 来自 npm 链接文件夹的所有 .bin 文件夹。

                            find "linked-folder" -type d -name ".bin" -print  
                            For all folders listed | rm -rf  
                            

                            这解决了问题。

                            【讨论】:

                              【解决方案23】:

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

                              如果您使用 Yarn + Learna 打包 monorepo 项目,则必须导航到目标包中的 package.json,然后运行 ​​npm installnpm install &lt;package name&gt;

                              【讨论】:

                                【解决方案24】:

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

                                版本:

                                node 13.8.0 
                                npm 6.13.6
                                

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

                                【讨论】:

                                  【解决方案25】:

                                  如果您的默认 npm 注册表不是公共 npm 存储库(您可以通过转到您的 .npmrc 文件或通过 npm CLI 命令检查您的 npm 配置来检查这一点),您可以尝试取消设置注册表配置以使其指向到公共 npm 存储库。然后再次运行npm install

                                  如果您有公共 npm 存储库中不可用的依赖项,请尝试暂时从 package.json 中删除这些依赖项。这将允许您运行npm install。最后,恢复您删除的依赖项和注册表配置,最后一次运行npm install 以安装其余依赖项。

                                  【讨论】:

                                    【解决方案26】:

                                    对于那些在使用 Jenkins(或任何 CI)构建 Docker 映像时遇到此问题的人,请确保将 package-lock.json 也复制到容器中。

                                    COPY ./src/package*.json /home/node/
                                    RUN npm install
                                    

                                    对我们来说,安装实际上很顺利,仅在为生产映像运行 npm prune production 时发生错误。

                                    【讨论】:

                                    • 我遇到了 npm prune 和 NODE_ENV 未设置为生产的问题。通过再次删除 node_modules 和 npm install 解决
                                    【解决方案27】:

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

                                    【讨论】:

                                      【解决方案28】:

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

                                      【讨论】:

                                        【解决方案29】:

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

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

                                        【讨论】:

                                          【解决方案30】:

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

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

                                          【讨论】:

                                            猜你喜欢
                                            • 2019-02-21
                                            • 2016-02-03
                                            • 2019-07-17
                                            • 1970-01-01
                                            • 2019-07-19
                                            • 2020-01-05
                                            • 2020-08-10
                                            相关资源
                                            最近更新 更多