vue2 webpack js项目运行时,会出现下面的警告信息
MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 upgrade listeners added to [Server]. Use emitter.setMaxListeners() to increase limit
(Use `node --trace-warnings ...` to show where the warning was created)
查询后得知
在 Vue.js 项目中遇到 MaxListenersExceededWarning: Possible EventEmitter memory leak detected 警告,通常是因为某个事件监听器被多次添加,超过了默认的最大监听器数量(默认是 10 个)。这个问题可能会导致内存泄漏。
排查原因
通过代码排查发现是反向代理目录添加太多造成的,因为反向代理接口目录比较多造成的
devServer: {
port: 9545,
open: true,
overlay: {
warnings: false,
errors: true
},
proxy: {
'/user': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/moneyLog': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/order': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/banner': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/basic': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/config': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/sysDictType': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/cash': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/bank': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
},
'/sysRole': {
target: 'https://www.wanjunshijie.com',
changeOrigin: true
}
// 可以继续添加更多的代理规则
}
},
解决方案
不做限制
vue.config.js中增加:require('events').EventEmitter.defaultMaxListeners = 0;
require('events').EventEmitter.defaultMaxListeners = 0;
这一段代码的意思是将 Node.js 中 EventEmitter
对象的默认最大监听器数量设置为无限制。具体来说:
require('events')
:引入 Node.js 的events
模块。EventEmitter
:从events
模块中获取EventEmitter
类。defaultMaxListeners
:EventEmitter
类的一个静态属性,用于设置所有EventEmitter
实例的默认最大监听器数量。= 0
:将defaultMaxListeners
设置为 0,表示不限制监听器的数量。
虽然这种方法可以避免警告,但并不推荐作为长期解决方案,因为它可能掩盖了代码中的潜在问题,如重复添加监听器或内存泄漏。更好的方法是查找并优化代码,确保不会重复添加不必要的监听器。