Wie implementiert man einen EventBus für ein TypeScript-basiertes CLI-Framework (climonad.js)?JavaScript

Javascript-Forum
Guest
 Wie implementiert man einen EventBus für ein TypeScript-basiertes CLI-Framework (climonad.js)?

Post by Guest »

Ich entwickle derzeit ein CLI-Framework namens climonad.js – das in TypeScript geschrieben ist – und ich möchte einen Event-Bus-Mechanismus einführen, um verschiedene Ereignisse (z. B. Fehler, Befehlslebenszyklusbenachrichtigungen, Nutzungsverfolgung) zu verarbeiten und zu versenden ). Mein Ziel ist es, diese Bedenken zu entkoppeln, damit andere Module auf Ereignisse warten und darauf reagieren können, ohne auf Node.js-spezifische Module (wie das integrierte „events“-Paket) angewiesen zu sein.
Unten ist ein kurzes Konzept der Art von EventBus, an die ich gedacht habe:

Code: Select all

export class EventBus {
private listeners: Record> = {}

/**
* Register an event listener for a specified event.
*/
public on(event: string, listener: (...args: unknown[]) => void): void {
if (!this.listeners[event]) {
this.listeners[event] = []
}
this.listeners[event].push(listener)
}

/**
* Unregister an event listener.
*/
public off(event: string, listener: (...args: unknown[]) => void): void {
if (this.listeners[event]) {
this.listeners[event] = this.listeners[event].filter(l => l !== listener)
}
}

/**
* Emit an event to all registered listeners.
*/
public emit(event: string, ...args: unknown[]): void {
if (this.listeners[event]) {
for (const listener of this.listeners[event]) {
listener(...args)
}
}
}
}
Beispielverwendung könnte so aussehen:

Code: Select all

import { EventBus } from "./EventBus"

const bus = new EventBus()

// Subscribe to an "error" event
bus.on("error", (err: unknown) => {
console.error("[climonad.js] Error:", err)
})

// Emit the error somewhere else in the code
try {
// Some CLI-specific action...
} catch (e) {
bus.emit("error", e)
}
Ich hoffe auf Feedback zu den folgenden Punkten:
  • Gibt es einen idiomatischeren oder empfohlenen Ansatz? Implementieren einer Pub/Sub- oder ereignisbasierten Architektur in einem TypeScript-CLI-Projekt?
  • Sehen Sie irgendwelche Fallstricke in diesem simplen Design (wie potenzielle Speicherlecks oder Leistungsprobleme), wenn die CLI groß wird? oder wird häufig ausgeführt?
  • Würden Sie Schlagen Sie vor, irgendeine Art von Prioritätsbehandlung oder asynchroner Ereignisverarbeitung für fortgeschrittenere CLI-Aufgaben einzuführen?
  • Gibt es bekannte Muster für die Überbrückung von Ereignisemissionen zwischen verschiedenen Modulen (z. B. Nutzungsverfolgung, Fehlerprotokollierung) in a CLI-Kontext, den ich untersuchen sollte?
Ich würde gerne Ihre Vorschläge, Best Practices oder möglichen Verbesserungen hören. Vielen Dank im Voraus!
Ähnliches Problem: https://github.com/supitsdu/climonad.js/issues/23

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post