【问题标题】:Getting MaxListenersExceededWarning while building a React app在构建 React 应用程序时获取 MaxListenersExceededWarning
【发布时间】:2020-05-05 00:45:42
【问题描述】:

我有一个通过 CRA 创建的 React 应用程序,但它被弹出了。当我尝试使用 npm run build (node scripts/build.js) 构建应用程序时,我收到一条警告:

(node:6) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 SIGINT listeners added. Use emitter.setMaxListeners() to increase limit.

这个警告有多重要,我该如何解决这个问题?

【问题讨论】:

    标签: node.js reactjs webpack create-react-app


    【解决方案1】:

    这个警告有多重要,我该如何解决这个问题?

    这取决于您的代码在做什么。

    如果您对某个 EventEmitter 对象只有 10 个以上的合法侦听器,并且所有侦听器都是合法的,则可以忽略该警告,或者您可以使用 emitter.setMaxListeners() 将其设置为更高的警告值。

    另一方面(以及此处出现警告的原因),如果您不是要拥有超过 10 个侦听器,而达到 10 个以上的唯一原因是因为您未能删除一些旧的侦听器不再需要,那么这是一个问题的迹象,您需要找到添加这些侦听器的位置,然后找到可以在完成后安全删除每个侦听器的位置。

    这是今天另一个问题的案例示例,其中确实需要删除侦听器。您可以在此处查看该示例:

    Node.JS Server Sent Events: Route continues to run after res.end() resulting in ERR_STREAM_WRITE_AFTER_END error

    如果您向我们展示了添加侦听器的实际代码及其周围的上下文,我们可能会更具体地建议您是否应该删除侦听器。

    【讨论】:

    • 这发生在使用构建脚本构建项目时。
    • @HadiRanjbar - 如果只是构建脚本,那么可能没什么好担心的。如果它是您自己的自定义脚本,您可能会修复它。
    【解决方案2】:

    您可以使用emitter.setMaxListeners(n) 增加限制,更好的方法是使用 React 的生命周期钩子并取消订阅侦听器。

    【讨论】:

    • 这发生在使用构建脚本构建项目时。
    • 这很正常,您需要手动取消订阅每个听众。
    猜你喜欢
    • 2016-06-11
    • 2020-04-03
    • 2021-10-25
    • 2022-09-28
    • 2011-05-17
    • 1970-01-01
    • 2017-04-07
    • 2019-07-26
    • 1970-01-01
    相关资源
    最近更新 更多