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

时间:2016-11-12 18:41:39

标签: 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>

这是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并尝试重新安装。无法理解导致此问题的原因以及解决方法。

40 个答案:

答案 0 :(得分:24)

metzelder's answer帮助我解决了该问题。但是,如果您运行命令npm cache clean,它将向您显示一条消息

  

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

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

所以命令是:

npm cache clean --force

答案 1 :(得分:23)

npm重建-它解决了我的问题

答案 2 :(得分:11)

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

答案 3 :(得分:4)

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

  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
    

答案 4 :(得分:3)

npm uninstall

npm cache clean --force

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

npm install

好吧!

答案 5 :(得分:3)

对于我来说,请更新到最新版本:

npm install -g npm

答案 6 :(得分:3)

发生在docker(节点:15个破坏者)中。

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

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

答案 7 :(得分:2)

我通过以下方式克服了这个问题:

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

  • 在运行 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); Bundle bundle=getIntent().getExtras(); String fullNameFinal = bundle.getString("fullName"); String courseFinal = bundle.getString("course"); int avgAttendanceFinal= bundle.getInt("avgAttendance"); boolean logInStatusFinal = bundle.getBoolean("logInStatus"); nameTextView=(TextView)findViewById(R.id.nameTextView); courseTextView=(TextView)findViewById(R.id.courseTextView); nameTextView.setText(fullNameFinal); courseTextView.setText(courseFinal); overridePendingTransition(R.anim.slide_in, R.anim.slide_out); ListView lv; Context context; ArrayList prgmName; int [] prgmImages={R.drawable.listblockgold,R.drawable.listblockindigo,R.drawable.listblocklime,R.drawable.listblockorange,R.drawable.listblockpink,R.drawable.listblockred,R.drawable.listblocksilver,R.drawable.listblocktan,R.drawable.listblockteal}; String [] prgmNameList={"Maths","P.Comm.","IOT","Operating Systems","Web Programming","DSP","PHP","Jquery","JavaScript"}; context=this; lv=(ListView) findViewById(R.id.testListView); lv.setAdapter(new CustomAdapter(this, prgmNameList,prgmImages)); `AddSubject Activity` public class AddSubject extends AppCompatActivity { //Buttons Button missedMinus; Button missedPlus; //ButtonsEnd //TextViews TextView safeBunksNumber; TextView missedLectures; TextView totalLecturesTextView ; TextView percentageTextView; //TextViewsEnd EditText missedLecturesTextView; ProgressBar progressBar; static String s= Integer.toString(10); public void missedMinusClick(View view) { totalLecturesTextView=(TextView)findViewById(R.id.totalLecturesTextView); int totalLectures= Integer.parseInt(totalLecturesTextView.getText().toString()); missedLecturesTextView=(EditText)findViewById(R.id.missedLecturesTextView); int missedLectures= Integer.parseInt(missedLecturesTextView.getText().toString()); missedLecturesTextView.setText(Integer.toString(missedLectures-1)); safeBunksNumber=(TextView)findViewById(R.id.safeBunksNumber); int safeBunksNumber; } public void missedPlusClick(View view2) { missedLecturesTextView=(EditText)findViewById(R.id.missedLecturesTextView); int missedLectures= Integer.parseInt(missedLecturesTextView.getText().toString()); missedLecturesTextView.setText(Integer.toString(missedLectures+1)); } public void submitOnClick1(View view3) { EditText subName = (EditText)findViewById(R.id.subName); EditText totalLecturesTextView = (EditText)findViewById(R.id.totalLecturesTextView); EditText missedLecturesTextView =(EditText)findViewById(R.id.missedLecturesTextView); String subjectName = subName.getText().toString(); int totalLectures = Integer.parseInt(totalLecturesTextView.getText().toString()); int missedLectures = Integer.parseInt(missedLecturesTextView.getText().toString()); SharedPreferences sharedPreferences = this.getSharedPreferences("com.example.yashrandive.attendancemanager", Context.MODE_PRIVATE); sharedPreferences.edit().putString("subName",subjectName); sharedPreferences.edit().putInt("totalLectures",totalLectures); sharedPreferences.edit().putInt("missedLectures",missedLectures); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_subject); } } 命令之前,我建议运行npm install

答案 8 :(得分:2)

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

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

答案 9 :(得分:1)

我删除了

  

node_modules

,然后通过

重新安装
  

npm安装

对我有用

答案 10 :(得分:1)

我解决了100%的gulp版本存在此问题:3.5.6。

您应先清理package-lock.js,然后运行npm install并使其正常工作

答案 11 :(得分:1)

我刚刚npm rebuild就像魅力一样运作。

答案 12 :(得分:1)

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

如果您使用Yarn + Learna打包monorepo项目,则必须导航到目标程序包中的package.json,然后运行Nonenpm install

答案 13 :(得分:1)

万一这些答案对您都不起作用,可能是因为您使用的终端机不正确/您的node_modules被计算机的另一部分使用了。

就我而言,在执行sudo npm i时,我一直在这个错误(超出最大调用堆栈大小)和访问错误事件之间徘徊。

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

答案 14 :(得分:1)

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

对于 Unix / OSX 用户,我已经删除了根 .npmrc 文件~/.npmrc
在尝试之前,,检查是否没有必要(对您而言),然后使用以下命令将所有内容带入终端:cat ~/.npmrc

如果您有类似的内容:

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

如果那边有一些内容
(您可以保存此文件cp ~/.npmrc ~/.npmrc_copy的副本)
尝试使用此文件删除该文件:
(适用于bash用户:Unix / Ubuntu / OSX ...)

rm -f ~/.npmrc

这对我有用。
希望这可以解决其他人的问题。

答案 15 :(得分:1)

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

rm package-lock.json
rm -r node_modules

答案 16 :(得分:1)

  

npm缓存清除在消息下方返回

     

从npm @ 5开始,npm缓存会因损坏问题而自我修复,并且保证从缓存中提取的数据是有效的。如果要确保所有内容都一致,请改用“ npm cache verify”。另一方面,如果要调试安装程序中的问题,则可以使用npm install --cache /tmp/empty-cache来使用临时缓存,而不是破坏实际的缓存。

如果您按照上述说明运行npm缓存验证,则实际上会运行缓存验证和垃圾回收来解决问题

  

已验证并压缩缓存(〜\ AppData \ Roaming \ npm-cache_cacache):   验证的内容:6183(447214684字节)垃圾回收的内容:16   (653745字节)索引条目:9633

答案 17 :(得分:1)

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

答案 18 :(得分:0)

npm cache clean --force

这对我来说适用于节点8和npm 6 +

答案 19 :(得分:0)

echo 65536 | sudo tee -a /proc/sys/fs/inotify/max_user_watches

在Ubuntu上为我工作。

答案 20 :(得分:0)

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

答案 21 :(得分:0)

以下步骤可帮助我解决此问题:

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

答案 22 :(得分:0)

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

在我的情况下,我有一个空的node_modules文件夹,该文件夹是最近一次初始化时重新创建的,仍然存在

npm ERR!超出了最大调用堆栈大小

运行SELECT进行WordPress插件开发时。

问题是在我的wp-content文件夹中运行的实时重载监视程序,第一次停止了安装。

答案 23 :(得分:0)

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

答案 24 :(得分:0)

通常,一旦安装了模块,使用TOP_RESOLUTION代替npm ci更为方便。请在生产环境中签出this SO answer for the advantages of the former with respect to the later。 所以请运行

npm install

所有依赖项将被更新,问题将消失。否则,如果彼此之间存在严重的不同步,就会出错。

答案 25 :(得分:0)

我遇到了这个问题,结果发现,我在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脚本,并创建了一个圆形的符号链接。删除符号链接可以解决此问题。

答案 26 :(得分:0)

rm -rf node_modules

然后重新安装对我有用。

注意:可能不需要清除锁定文件

答案 27 :(得分:0)

我遇到了同样的问题,但就我而言,我从一开始就一直使用yarn,但是从某些软件包自述文件中,我复制了npm install命令并收到此错误。后来意识到yarn add <package-name>解决了该问题,并安装了软件包。

将来可能会对某人有所帮助。

答案 28 :(得分:0)

我遇到了类似的错误。我将其归结为npm无法从.bin文件夹中删除npm链接文件夹的文件。因此,我进入了rm -rf,从npm link'd文件夹中删除了所有.bin文件夹。

.image_with_loader_container {
  position: relative;
  width: 100%;
  padding-bottom: 139.34426%;
  background: #dbdbdb;
}

.image_with_loader_container img {
  border-radius: 4.75%/3.5%;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}

问题解决了。

答案 29 :(得分:0)

今天,即使在运行npm prune之后的 中运行npm cache clean --force时,也会遇到此错误。

版本:

node 13.8.0 
npm 6.13.6

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

答案 30 :(得分:0)

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

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

答案 31 :(得分:0)

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

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

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

答案 32 :(得分:0)

改用纱为我解决了这个问题。

答案 33 :(得分:0)

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

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

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

答案 34 :(得分:0)

我尽一切努力在Windows 7计算机上解决此问题,例如

重新安装和重建npm

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

我如何解决此问题

在全局.npmrc中删除我的项目特定配置 在驱动器位置:/ Windows / Users /../。npmrc

答案 35 :(得分:0)

您卸载npm软件包并强制清理缓存并关闭终端,然后重新安装其中的任何软件包。

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

然后重新启动终端并检查

仍然无法正常工作,将npm和node都升级到最新版本

答案 36 :(得分:0)

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

答案 37 :(得分:0)

我已尽一切努力在Mac上解决此问题。我认为当我已经从Node.js下载npm并随后使用Teambrhouse视频同时使用Homebrew重新安装了npm时,问题就开始了。

这是我尝试过的:

来自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。

答案 38 :(得分:-1)

要解决此问题,请先清除 npm cache,然后重新安装npm软件包,以解决此问题

运行 清理缓存

npm cache clean --force

然后 这个阶段很重要

npm rebuild

最后 重新安装节点模块

npm install

祝你好运

答案 39 :(得分:-2)

先试试这个!

再次运行npm install

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

理论:

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

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

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

如果幸运的话,它会运行足够长的时间让您抢到 ? 或 ☕ ?