Lesen der requirJs-Dokumentation,
Um die Circular Dependencies zu beheben, wird empfohlen, exports
zu verwenden, um ein leeres Objekt für das Modul zu erstellen, das sofort für andere Module verfügbar ist.
Ich versuche diesen Code, aber es scheint nicht zu funktionieren. Was ist falsch?
P.S .:
lies die Kommentare, um die Ausgabe zu sehen,
vor allem das B-Modul innerhalb von setTimeout Anruf.
Sie sollten die synchrone Version von require()
in Ihrem B-Modul verwenden können, um auf das Modul "A" zuzugreifen:
Ich habe häufig zirkuläre Probleme mit AMD-Modulen, um einen Anwendungskern zu erstellen, der sowohl viele Module enthält als auch Konfigurations- oder andere nützliche Objekte für diese Module enthält.
Ich habe heute etwas experimentiert und das scheint ziemlich gut zu funktionieren.
%Vor%Die Objekte sind beide === gleich, was sehr vielversprechend erscheint.
BEARBEITEN:
Die obige Methode funktioniert nicht, wenn sie optimiert ist. Hier ist eine andere Methode, die (ungeprüft) möglicherweise: Ссылка
%Vor%Eine Option wäre, das Modul selbst nicht zurückzugeben, sondern eine Funktion, die das Modul instanziiert (in diesem Beispiel wäre es ein Konstruktor wie in Typoskript definiert, unten ist der generierte js-Code ). Beachten Sie, dass Schnittstellen keinen .js-Code generieren)
Datei IA.ts
%Vor%Datei IB.ts
%Vor%Datei ClassA.ts
%Vor%Datei ClassB.ts
%Vor%Datei MainTest.ts
%Vor%Und der generierte JS-Code:
Datei ClassA.js
%Vor%Datei ClassB.js
%Vor%Datei MainTest.js
%Vor%schließlich wird die Ausgabe sein:
Ich bin ClassB
Ich bin ClassB
Ich bin ClassA
Ich bin ClassA
Tags und Links javascript requirejs dependency-management circular-dependency