node.js - ein Erweiterungsmodul in node importieren
Ich habe eine Node.js Angular-App, in die ich versuche, babylon.js zu importieren.
Aktuelle Einrichtung
1) npm install --save babylonjs, um das npm-Repository in den Node-Modulen meines Projekts zu installieren.
Das folgende Bild zeigt die Ordnerstruktur des npm-Repositories.
2) In meiner Angular-Komponente importiere ich die BABYLON-Deklaration aus den Dateien babylon.module.d.ts und babylon.max.js im obigen Bild wie folgt.
import * as BABYLON from 'babylon.js'Babylonjs funktioniert jetzt großartig, hat Typdefinitionen aktiviert und alles, sodass ich BABYLON wie unten abgebildet verwenden kann
Problem
Keine der enthaltenen Erweiterungen ist angeschlossen. Diese Erweiterungen befinden sich in den folgenden Ordnern
(Die vollständige Ordnerstruktur ist im ersten Bild. Ich habe den GUI-Ordner geöffnet gelassen, da dies die spezifische Erweiterung ist, die ich zu diesem Zeitpunkt zu aktivieren versuche)
Die Haupt-babylon.module.d.ts-Datei definiert BABYLON wie folgt:
declare module BABYLON { //class types are defined in here }Die GUI-Erweiterung (alle anderen folgen derselben Logik) erklärt sich selbst als Teil von BABYLON wie folgt:
declare module BABYLON.GUI { //extend classes & create new classes in here in here }Versuchte Lösungen
1) babylon.gui.d.ts deklariert BABYLON.GUI, also habe ich einfach Folgendes versucht
import * as BABYLON from 'babylonjs';
import * as BABYLON.GUI from 'babylonjs/dist/preview release/gui/babylon.gui';
Dies erzeugt den folgenden Typescript-Fehler: Duplicate identifier 'BABYLON', was jedoch nicht überraschend ist, da die Datei babylon.gui.d.ts ihre Teile als BABYLON.GUI deklariert.
2) Verwendung des CDN in der index.html-Datei. Dies funktioniert, jedoch funktionieren die Typen nicht. Selbst wenn ich Typings zum Laufen bringen würde, ist die Verwendung des CDN weniger performant. Die Ressourcen werden auf jeder Seite im Dokument <head> geladen. Bei Imports werden die Ressourcen nur abgefragt, wenn die Komponente aktiv ist.
3) Anhängen der babylon.gui.d.ts-Datei an die babylon.module.d.ts-Datei. BABYLON.GUI ist immer noch undefiniert.
Änderungen am npm-Repository sind ohnehin unerwünscht, da alle npm-Aktualisierungen oder Installationen die Änderungen überschreiben werden.
4) Ich habe hier mit einem BABYLON-Entwickler gesprochen, und wir sind irgendwie an eine Sackgasse geraten.
Hat jemand Vorschläge, wie man diese Erweiterung richtig importiert?
PS. Sobald wir dies beantwortet haben, werde ich mit dem Entwickler zusammenarbeiten, um eine nahtlose Erfahrung für alle Node-Benutzer zu implementieren, die babylon.js in ihre Projekte einbinden möchten!
Antwort #1
Ich habe mit dem leitenden Entwickler deltakosh darüber gesprochen.
Um ein paar Dinge klarzustellen:
- Dieses Problem liegt nicht bei npm
- Dieses Problem liegt nicht bei Node
- Dieses Problem liegt daran, wie Babylon strukturiert ist
- Die Entwickler refaktorisieren aktiv, um das im obigen Beispiel gewünschte Importverhalten zu unterstützen.
Wenn jemand neugierig ist, hier ist der Link zum offenen Issue auf GitHub, das sich auf diese Frage bezieht.
In der Zwischenzeit, um Babylon zu verwenden, während an der Importunterstützung für das Importieren von Paketen gearbeitet wird, habe ich Folgendes getan:
Verwenden Sie das CDN für alle Babylon-Bibliotheken
Um TypeScript-Kompilationsprobleme zu vermeiden, deklarieren Sie Folgendes am Anfang Ihrer .ts-Datei: declare let BABYLON: any;. Dies wird Babylon zusammen mit Paketen verwendbar machen, jedoch werden wir in der Zwischenzeit keine Vorteile durch Typdefinitionen haben.
Fühlen Sie sich frei, sich einzubringen, wenn Sie eine elegantere Zwischenlösung gefunden haben!


