首页 > 解决方案 > NPM 在“npm install”期间失败,出现“npm ERR!超出最大调用堆栈大小'错误

问题描述

我正在开发一个流行的 wordpress 插件(Sensei-lms)的分支......插件开发人员已在此页面上提供了创建开发环境的说明:https ://github.com/Automattic/sensei/wiki/Setting-Up -您的开发环境#configure-a-local-wordpress-instance

我已经按照说明创建了一个干净的实例并克隆了 git repo

但是在运行npm install命令时,我总是收到以下错误:

vagrant@vvv:/srv/www/wordpress-one/public_html/wp-content/plugins/sensei$ npm install
npm ERR! Maximum call stack size exceeded

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/vagrant/.npm/_logs/2021-09-07T03_45_45_825Z-debug.log

除了重复问题之外,日志文件并没有真正给出任何问题的迹象......

19886 verbose stack RangeError: Maximum call stack size exceeded
19886 verbose stack     at RegExp.test (<anonymous>)
19886 verbose stack     at isDepOptional (/usr/lib/node_modules/npm/lib/install/deps.js:432:45)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:441:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19886 verbose stack     at failedDependency (/usr/lib/node_modules/npm/lib/install/deps.js:457:9)
19887 verbose cwd /srv/www/sensei/public_html/wp-content/plugins/sensei-lms
19888 verbose Linux 5.4.0-80-generic
19889 verbose argv "/usr/bin/node" "/usr/bin/npm" "install"
19890 verbose node v14.17.6
19891 verbose npm  v6.14.15
19892 error Maximum call stack size exceeded
19893 verbose exit [ 1, true ]

从我的阅读来看,安装的依赖项的迭代似乎已经达到了极限。

我没有运气尝试了以下所有方法:

1:根据多个博客和文章建议这样做

vagrant@vvv:...$ cd /srv/www/wordpress-one/public_html/wp-content/plugins/sensei
vagrant@vvv:...$ rm -fr /usr/lib/node_modules
vagrant@vvv:...$ rm -fr node_modules/
vagrant@vvv:...$ npm cache clean --force 
vagrant@vvv:...$ npm rebuild
vagrant@vvv:...$ rm package-lock.json
vagrant@vvv:...$ npm install

2:根据http://pyha.ru/forum/topic/9396.1

vagrant@vvv:...$ cd /srv/www/wordpress-one/public_html/wp-content/plugins/sensei
vagrant@vvv:...$ rm -fr /usr/lib/node_modules
vagrant@vvv:...$ rm -fr node_modules/
vagrant@vvv:...$ npm cache clean --force 
vagrant@vvv:...$ node --stack-size=10000 /usr/lib/node_modules/npm/bin/npm-cli.js install

任何进一步的帮助 - 我可能做错了什么?


除了上述问题:

  1. 我在 Macbook Pro 上运行 VVV,默认设置会创建一个 VVV 机器,该机器运行带有 npm 6.14.15 版本的 Ubuntu 20.04.3 LTS 便当盒(来自 nodejs 包版本:14.17.6-deb-1nodesource1)

  2. 我已经销毁了 VVV 实例并再次从干净的环境中开始工作,而没有我在之前的尝试中可能会产生的任何问题 - 仍然失败!

  3. 我已经去了我的桌面 linux 机器(与运行 VVV 的 mac 不同的机器) - linux 桌面本机运行 Ubuntu 20.04.3 LTS,默认安装 npm 6.14.4 版本(来自 nodejs 包版本:10.19.0~ dfsg-3ubuntu1) 和干净的老师git clonenpm install工作正常!

标签: wordpressnpmwordpress-plugin-creationvvv-wordpress

解决方案


似乎问题在于 Vagrant(甚至是 VirtualBox),而不是 npm 或 sensei....

在快速的谷歌搜索中,我发现了以下文章:https ://www.cloudbees.com/blog/otto-next-generation-vagrant其中提到(强调我的):

Vagrant 远未消亡,但它存在几个长期存在的问题,包括创建的虚拟机的资源占用、 主机和虚拟机之间共享文件的速度以及对虚拟机进行配置更改的速度。

这让我想到如果我可以在虚拟机上运行 npm,而不是通过主机共享的文件夹中......如下:

vagrant@vvv:~$ pwd
   /home/vagrant
vagrant@vvv:~$ git clone https://github.com/Automattic/sensei.git
vagrant@vvv:~$ cd sensei/
vagrant@vvv:~$ npm install

它奏效了!

所以下一步是将成功的 node_modules 文件夹从非共享文件夹复制到 public_html 文件夹并构建资产:

vagrant@vvv:...$ cd /srv/www/wordpress-one/public_html/wp-content/plugins/
vagrant@vvv:...$ git clone https://github.com/Automattic/sensei.git
vagrant@vvv:...$ cd sensei/
vagrant@vvv:...$ mv ~/sensei/node_modules/ .
vagrant@vvv:...$ npm run build:assets

mv了很长时间,但它奏效了!

不知道如果我需要再次运行 npm install 会发生什么,但是当我们遇到它时,我们会越过那座桥。

至少我们在工作......


推荐阅读