03 - Clientside Dynamic Imports

Anleitung zum Erstellen von Blogs und Artikeln: Bitte hier klickieren

Moin,

nun geht es mal weiter mit meiner Story bei alt:V.

Nachdem ich nun also die Grundlagen von C++ erlernt habe, den Aufbau der Modules verstanden habe und auch schon das ein oder andere kleine Feature implementiert habe wurde es nun Zeit mich mal an etwas größerem zu versuchen.


Von einem alt:V Dev hatte ich die Aufgabe erhalten clientside dynamic imports möglich zu machen. Dies ermöglicht das importieren von Dateien während der Laufzeit.

Das waren auch alle Informationen die ich nun hatte, also hieß es mal wieder in die V8 Documentation eintauchen und mal sehen was dabei so rum kommt.

Es hat auch nur eine Google Suche gedauert bis ich eigentlich genau das gefunden hab was ich gebraucht hab, nämlich v8::Isolate->SetHostImportModuleDynamicallyCallback. Sehr einprägsamer Name erstmal.

Diese Funktion akzeptiere nun also ein Callback bei welchem benötigte Parameter übergeben werden um die angefragte Datei zu importieren.

Und dieser Callback soll ein Promise rückgeben welches dann mit dem Module Namespace der importierten resolved wird, oder es wird rejected wenn die Datei nicht gefunden wurde.

Klingt erstmal nicht so kompliziert, wäre das nicht alt:V wär es auch sehr einfach gewesen. Denn es ist bereits eine Funktion verfügbar um das ganze für uns zu erledigen (quasi).

Nur kann man in alt:V ja nicht nur Dateien importieren, sondern das interne Importsystem wurde so erweitert dass man auch andere Ressourcen importieren kann. Das macht das ganze etwas schwerer.

Bevor wir nun also nach der Datei suchen müssen wir sicherstellen dass alle Ressourcen geladen sind, und das stellte sich als schwierig heraus. Denn ich bin auch nicht allzu gut in C++ um zu wissen wie man ordentlich Lambda Functions anwendet oder so. Hier war auch das größte Problem, richtig lösen konnte ich das nie. xd

Ganz viel rumgefuchtel und rumprobieren später waren auch schon 5 Tage vergangen und ich hab mich entschieden meine PR zu erstellen, damit die Devs sich das ganze mal angucken können.

Es wurde kurz danach auch gemerged.


Am Ende ist von der ganzen Arbeit nicht allzu viel übrig geblieben da es teilweise neu geschrieben wurde, aber ich hab wenigstens die aufwendige Vorarbeit geleistet damit es schneller implementiert werden konnte.

Aber wenigstens ist es in alt:V jetzt drin!


Wir lesen uns beim nächsten Artikel.


Bis dann, mfg

Kommentare