2012-06-17 9 views
8

Ich versuche Require.js zu bekommen, um Module auf der Serverseite mit Java 6 und Rhino zu laden.Auflösen von Modulen mit require.js und Java/Rhino

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

Aber wenn ich versuche auch eine einfache JS zu erfordern, wie hello.js

var hello = 'hello'; 

eine der folgenden verwendet:

require('hello'); 
require('./hello'); 

es funktioniert nicht. Ich bekomme

Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.JavaScriptException: [object Error] (<Unknown source>#31) in <Unknown source> at line number 31 
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:153) 
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:167) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) 

Ich habe meine hello.js an der Spitze des Java Classpath. 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 der Stamm meiner Festplatte, der Stamm meines Benutzerverzeichnisses, das Verzeichnis, aus dem ich meine Java-App ausführen, usw. Nichts funktioniert.

schaute ich auf der Commonjs spec (http://wiki.commonjs.org/wiki/Modules/1.0) und es heißt, dass Top-Level-IDs (wie hello) von dem „konzeptuellem Modul Namensraum root“ aufgelöst werden, während relativ IDs (wie ./hello) gegen die Rufmoduls aufgelöst werden . Ich bin mir nicht sicher, wo eine dieser Basislinien ist, und ich vermute, dass das Problem ist.

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

EDIT: Denken, dass ich die Umgebung nach Pointy's Vorschlag in den Kommentar unten einstellen muss, habe ich versucht, r.js auch auszuwerten. (Ich habe versucht, die Bewertung nach require.js zu bewerten und dann wieder vor require.js.) In beiden Fällen bekomme ich einen Fehler:

Caused by: javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "arguments" is not defined. (<Unknown source>#19) in <Unknown source> at line number 19 
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:153) 
    at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:167) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:247) 

„Argumente“ erscheinen in r.js eine Variable zu sein. Ich denke, es ist für Befehlszeilenargumente, also glaube ich nicht r.js ist der richtige Weg für das, was ich versuche zu tun. Nicht sicher, obwohl.

+0

Etwas muss die APIs bereitstellen, die require.js vom Browser erwartet; Das heißt, die Bibliothek verwendet Webbrowserfunktionen zum Laden von Skripts. Was machst du, um diese verfügbar zu machen? – Pointy

+0

Wahrscheinlich nichts. :-) Was brauche ich? Ich habe gesehen, dass es eine Compiler.jar gibt, wenn Sie den Clojure-Compiler verwenden wollen, aber das bin nicht ich. Auch ich habe rhino.jar gesehen, aber es sah so aus, als wäre das für Rhino selbst, was Java 6 bereits beinhaltet. –

+0

Nun, ich bin nicht 100% sicher, was require.js tut, aber zum Beispiel viele solche Bibliotheken holen Skripte durch den Bau neuer '

Verwandte Themen