Kann ich sain.js mit QtScript verwenden?

8

Ich verwende QtScript, um Teile meiner Anwendung zu Entwicklungs- und Testzwecken zu automatisieren. Ich bin an dem Punkt angelangt, an dem ich Assertions testen möchte und auf "Standalone Assertion Libraries?" und was ich in Debian-Repositories finden kann ging für Should.js.

Ich habe Probleme beim Laden in meine Qt-Anwendung, da dies von der require() -Funktion des Knotens abhängt. Ich habe versucht, eine Version davon zu implementieren, beginnend mit "Unterstützung von require () von CommonJS" und endet mit dem Code unten.

Kann es zur Arbeit gemacht werden, oder bin ich in diesem Ansatz verloren? Wäre ich vielleicht besser dran, die Bits von should.js in eine einzige Datei zu kopieren? Ich würde es vorziehen, mich nicht dafür verantwortlich zu machen, eine Gabel auf dem neuesten Stand zu halten. (Lizenzierung ist kein Problem, da ich nicht beabsichtige, diesen Code neu zu verteilen).

Hier ist mein MCVE; Entschuldigung, ich konnte es nicht kürzer kriegen!

sollte.cpp

%Vor%

Makefile

%Vor%

Die Ausgabe ist

%Vor%

(Im Vorbeigehen - wie bekomme ich den tatsächlichen Funktionsnamen require im Stack-Trace anstelle von <native> ? Slots schaffen das, also sollte ich das können, oder?)

    
Toby Speight 26.11.2015, 10:46
quelle

1 Antwort

1

Ich habe es mit etwas mehr Details angeschaut und das C ++ Qt rewriting System ist für mich ein bisschen zeitaufwendiger als anfänglich gedacht. Es gibt auch ein Problem mit Bibliotheken mit require -ing Core-Modulen (die wiederum require native Module, die zu undefiniertem Verhalten führen würde - lesen: wahrscheinlich wird nicht funktionieren).

Ansatz # 1 - C++ require() Implementierung:

Implementiere benutzerdefiniertes node require() in C ++ Qt wie es in deiner Frage und deinem Link gestartet wurde. Details der Funktionsweise von node.js require() finden Sie hier . Sie müssen Core node Module in Ihrem require() Suchpfad haben (Sie können sie von node.js source repository beziehen).

Ansatz # 2 - Verwende browserify

Da das Problem, das wir in # 1 zu lösen versuchen, grundsätzlich das Laden und Zwischenspeichern von Javascript-Dateien ist, warum sollte man nicht etwas verwenden, das bereits zum selben Zweck existiert? Auf diese Weise können wir manuelle Arbeit vermeiden und javascript bündeln. Wir haben starke Anzeichen, dass es in einem Browser funktioniert (eingeschränktere Umgebung als node.js ).

%Vor%

index.js

%Vor%

Und führen Sie browserify :

aus %Vor%

In Ihrem Qt C++ :

%Vor%

Wir sind zu einem Workaround für require() gekommen, aber ich bin mir nicht sicher über die Interop. mit Qt . Außerdem habe ich einige Syntax Error von QtScript für einige js Module gefunden, also ist dies kein Wundermittel, auch wenn es zuerst so scheint.

Hinweis: Dies ist auch ein interessantes Projekt: Ссылка .

    
edin-m 09.12.2015 22:40
quelle

Tags und Links