Auflösen von Modulen mit require.js und Java / Rhino

8

Ich versuche, require.js zu bekommen, um Module auf der Serverseite mit Java 6 und Rhino zu laden.

Ich kann require.js selbst gut laden. Rhino kann die Funktion require() sehen. Ich kann sagen, weil Rhino sich beschwert, dass es die Funktion nicht finden kann, wenn ich require() zu etwas anderem wie requireffdkj() ändere.

Aber wenn ich versuche, sogar einen einfachen JS zu verlangen, wie hello.js

%Vor%

Verwenden Sie eine der folgenden Möglichkeiten:

%Vor%

es funktioniert nicht. Ich bekomme

%Vor%

Ich habe mein hello.js am Anfang des Java-Klassenpfads. Dort habe ich auch require.js . Ich habe versucht, hello.js überall dorthin zu verschieben, wo ich denken könnte, dass es möglicherweise gehen könnte, einschließlich des Stamms meiner Festplatte, des Stamms meines Benutzerverzeichnisses, des Verzeichnisses, in dem ich meine Java-App verwende, usw. Nichts funktioniert.

Ich habe mir die CommonJS-Spezifikation angeschaut ( Ссылка ) und sie sagt, dass die IDs der obersten Ebene (wie hello ) werden vom "Conceptual Module Name Space Root" gelöst, während relative IDs (wie ./hello ) gegen das aufrufende Modul aufgelöst werden. Ich bin mir nicht sicher, wo eine dieser Grundlinien ist, und ich vermute, dass das Problem ist.

Irgendwelche Vorschläge? Kann ich require.js sogar von Rhino verwenden?

BEARBEITEN: Ich denke, dass ich die Umgebung gemäß dem Vorschlag von Pointy im folgenden Kommentar einstellen muss, und habe versucht, r.js auch. (Ich habe versucht, nach Auswertung von require.js und dann wieder vor require.js zu evaluieren.) In beiden Fällen bekomme ich einen Fehler:

%Vor%

"Argumente" scheint eine Variable in r.js zu sein. Ich denke, es ist für Befehlszeilenargumente, also glaube ich nicht, dass r.js der richtige Pfad für das ist, was ich versuche zu tun. Nicht sicher aber.

    
Willie Wheeler 17.06.2012, 21:15
quelle

1 Antwort

12

require.js funktioniert gut mit Rhino. Kürzlich habe ich es in einem Projekt verwendet.

  1. Sie müssen sicherstellen, r.js (not require.js), geänderte Version von require zu verwenden .js für Rhino.
  2. Sie müssen die Klasse ScritableObject erweitern, um load und print function zu implementieren. Wenn Sie require(["a"]) aufrufen, wird die Ladefunktion in dieser Klasse aufgerufen. Sie können diese Funktion anpassen, um die js-Datei von einem beliebigen Speicherort zu laden. Im folgenden Beispiel lade ich von classpath .
  3. Sie müssen die Eigenschaft arguments im sharedscope definieren, wie im Beispielcode
  4. gezeigt
  5. Optional können Sie den Unterpfad mit require.config konfigurieren, um das Unterverzeichnis innerhalb des Klassenpfads anzugeben, in dem sich die js-Dateien befinden.

JsRuntimeSupport

%Vor%

Beispielcode

%Vor%

loader.js

%Vor%

js/app Verzeichnis sollte in Ihrem Klassenpfad sein.

    
sperumal 17.06.2012, 23:42
quelle