Podemos comunicarnos entre módulos por:
¿Existe alguna práctica recomendada a la hora de elegir entre los dos?
Entiendo que solo podemos importar la función si necesitamos usar un valor devuelto. Pero, cuando no lo hacemos, ¿cómo decidimos si importamos la función o usamos un emisor de eventos para activar la misma función?
(En caso de que importe, estoy hablando de módulos JS front-end para combinar con algo como Rollupjs)
//app.js import { say } from 'actions.js'; function demo(){ .... say('Hello'); } //say.js export function say(content){ console.log(content); } //app.js import { eventEmitter } from 'eventEmitter.js'; import 'say.js'; function demo(){ .... eventEmitter.emit('say', 'hello'); } //say.js import { eventEmitter } from 'eventEmitter.js'; eventEmitter.on('say', say); function say(content){ console.log(content); }La ventaja que veo al usar Event Emitters es que podemos evitar dependencias circulares durante la compilación. Pero me encantaría ver lo que otras personas piensan sobre esto.
Dos cosas que mencionas tienen diferentes propósitos.
Las importaciones se utilizan para la separación de códigos y una mejor estructura del proyecto, mientras que los emisores de eventos se utilizan como un bus de eventos.
Algunas cosas a considerar son:
import {something} from 'somewhere' en una sola página.Entiendo que solo podemos importar la función si necesitamos usar un valor devuelto.
Esto simplemente no es cierto, puede importar funciones que no devuelven nada. Por ejemplo, modifican el objeto que pasas a esa función o ese código es una especie de registrador especial.