Node.js 在未导出功能的另一个模块中定义EventEmitter处理程序

Node.js 在未导出功能的另一个模块中定义EventEmitter处理程序,node.js,events,es6-modules,eventemitter,Node.js,Events,Es6 Modules,Eventemitter,我在一个模块中声明并导出了一个EventEmitter实例(比如index.ts) class Logger extends EventEmitter {}; /* Logger instance */ export const logger: Logger = new Logger(); 在另一个模块中,我导入了这个logger实例,并定义了几个处理程序。(handlers.ts) 但是当我从index.ts文件导入外部模块中的logger实例并发出事件时。它不会被触发。但是,当处理程序和

我在一个模块中声明并导出了一个
EventEmitter
实例(比如
index.ts

class Logger extends EventEmitter {};

/* Logger instance */
export const logger: Logger = new Logger();
在另一个模块中,我导入了这个
logger
实例,并定义了几个处理程序。(
handlers.ts

但是当我从
index.ts
文件导入外部模块中的logger实例并发出事件时。它不会被触发。但是,当处理程序和声明都在一个文件中时,它会被触发。这是怎么回事


将类导出到处理程序模块是一个解决方案,但我的问题是:我们是否可以导出类的实例并在单独的模块中定义更多的处理程序?我意识到,进程根本无法访问我在其中定义事件处理程序的模块。将定义处理程序的外部模块导入到初始化事件发射器实例的模块[或]导入到启动代码的主进程有助于解决此问题

import "./external-handler-module.ts"

这使得应用程序进程可以“访问”代码。

听起来好像您没有将
handlers.ts
模块加载到应用程序中就发出了事件?我从'index.ts'导出了记录器实例,并将其导入了handler.ts,在那里我定义了事件处理程序。有没有办法做到这一点,仍然能够从其他模块发射。请注意,在另一个模块中定义事件处理程序之前,该类是实例化的,然后导出。是的,这是有效的。但是您需要实际加载并执行
handlers.ts
(例如在入口点模块中导入
it)来安装处理程序,因为没有其他依赖于它。你在这么做吗?如果是,请张贴该代码,如果不是,这就是问题所在。
import "./external-handler-module.ts"