[TOC]

node环境常见问题

1. node告警:Maxlistenersexceededwarning

告警的意思是对一个事件添加了11个监听器,溢出了监听器的最大值,需要通过setMaxListeners()增加监听器限制最大值。

增加监听器的limit数量,甚至取消限制,可以解决问题(后文会展示解除限制的方法)。 但这种情况根本的解决途径是去排查什么地方对一个事件增加了11个监听器,当确定11个监听器都是有必要的时候再去增加监听器的限制数。

在vue.config.js文件中添加如下代码:

require('events').EventEmitter.defaultMaxListeners = 20; // 将MaxListeners的限制数增加到20
require('events').EventEmitter.defaultMaxListeners = 0; // 解除限制

参考:https://segmentfault.com/a/1190000040710342

2. node 内存不足:JavaScript heap out of memory

在运行vue cli项目的时候,有时候会报如下错误:

- JS stacktrace --->

FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory
 1: 00007FF7E1BA3D05
 2: 00007FF7E1B7DD46
 3: 00007FF7E1B7E610

针对windows系统,解决方法,安装increase-memory-limitnpm包,使用该包增加运行内存:

# 全局安装increase-memory-limit
npm install -g increase-memory-limit
# 进入工程目录,执行:
increase-memory-limit

# 备用选项:https://www.pudn.com/news/62c43ba1502ed3121a92d0bb.html
npm i -g cross-env
#安装结束后,运行如下命令:
cross-env LIMIT=10240  increase-memory-limit # LIMIT是分配的内存大小,有3027、4096、8192、10240

当运行increase-memory-limit命令提示报错,node --max-old-space-size=4096不是内部或外部命令

这个问题,是因为执行 fix-memory-limit命令时,会在 当前项目的node_modules/.bin文件夹下的*.cmd文件中添加调整运行空间的命令,默认添加的"%_prog%",但是项目的正常运行需要%_prog%,也就是去掉双引号才可以。

可以通过编辑器的 replace all的功能,全局进行替换,注意不要选错目录。由此目录也可以发现,当前的命令是只针对当前项目的,所以,如果新开了一个项目,或者删除了node_modules依赖后,需要重新执行命令才可以。 如果vscode全局搜索搜不到 "%_prog%"关键字,需要点一下下面按钮:

参考链接:https://blog.csdn.net/Run_youngman/article/details/122474730

注意:increase-memory-limit命令可能会导致git提交命令冲突,解决方法是删除node_modules文件夹,重新安装一个就好。

苹果Mac电脑,可在终端环境脚本中添加上面命令,然后重启终端:

vi .zshrc
export NODE_OPTIONS=--max_old_space_size=5120
# 运行命令立即生效:source .zshrc

其他方法尝试:

1、终端运行如下命令:

npx --max_old_space_size=4095 vue-cli-service build --modern

2、终端运行如下命令:

node --max_old_space_size=4096 node_modules/@vue/cli-service/bin/vue-cli-service.js build --mode development
Last Updated: 7/21/2022, 3:09:06 PM