Zirkuläre Abhängigkeiten in NodeJS

Vermeiden Sie das, was ich „zirkuläre Abhängigkeiten“ nennen möchte.

Zirkuläre Abhängigkeiten treten auf, wenn zwei oder mehr Module aufeinander verweisen. Je mehr Verweise Sie in Ihrem Code herstellen, desto schwieriger ist er zu testen und komplizierter zu verstehen, und manchmal entstehen dadurch „unangenehme“ Probleme.

Einige können sich in zwei verschiedene Typen aufteilen:

  • Direkt - Beispiel: Klasse A braucht Klasse B, und Klasse B braucht auch Klasse A
  • Indirekt - Beispiel: Klasse A braucht Klasse B, Klasse B braucht auch Klasse C, und Klasse C braucht Klasse A

Beispiele, die zu vermeiden sind:

import { ServiceB } from './ServiceB';

export class ServiceA {
  ...
}
...
import { ServiceA } from './ServiceA';

export class ServiceB {
  ...
}
import { ServiceB } from './ServiceB';

export class ServiceA {
  ...
}
...
import { ServiceC } from './ServiceC';

export class ServiceB {
  ...
}
...
import { ServiceA } from './ServiceC';

export class ServiceC {
  ...
}

Verwenden Sie das Paket ‘madge’, um DI zu prüfen

Ein Tool, das Sie für die Überprüfung Ihrer zirkulären Abhängigkeiten in Betracht ziehen sollten, ist madge. Dieses Tool ist ziemlich praktisch, wenn es darum geht, „zirkuläre Abhängigkeiten“ zu erkennen, und zeigt die Ansicht auch in einer schönen Darstellung an.

Abhängigkeit zu Ihren Entwicklungsabhängigkeiten hinzufügen

npm i -D madge

Fügen Sie ein Skript zur Überprüfung der Abhängigkeiten und ein Skript zur Überprüfung der circular hinzu:

{
  ...
  "scripts": {
    ...
    "dependencies": 
      "madge --extensions js,ts src",
    "circular:dependencies": 
      "madge --circular --extensions js,ts src",
  }
}

Wenn Sie einen Visualisierungsteil als svg wünschen, der Graphviz auf Ihrem Rechner benötigt, können Sie die folgenden Skripte hinzufügen:

{
  ...
  "scripts": {
    ...
    "dep:svg": 
      "madge --image dep.svg --extensions js,ts src",
    "circular:dep:svg": 
      "madge --circular --image cir.svg src",
  }
}

Schreiten Sie weiter voran und genießen Sie jeden Schritt Ihrer Programmierreise.