2012-06-17 14 views
8

Sto cercando di ottenere require.js per caricare i moduli sul lato server con Java 6 e Rhino.Risoluzione dei moduli utilizzando require.js e Java/Rhino

Sono in grado di caricare require.js stesso bene. Rhino può vedere la funzione require(). Posso dire perché Rhino si lamenta che non riesce a trovare la funzione quando cambio require() in qualcos'altro come requireffdkj().

Ma quando provo a richiedere anche un semplice JS, come hello.js

var hello = 'hello'; 

utilizzando una delle seguenti operazioni:

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

non funziona. Ottengo

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) 

ho il mio hello.js nella parte superiore del percorso di classe Java. Ecco dove ho anche require.js. Ho provato a spostare hello.js ovunque potessi pensare che potesse andare, inclusa la radice del mio disco rigido, la radice della mia directory utente, la directory da cui eseguo la mia app Java, ecc. Non funziona nulla.

ho guardato le specifiche CommonJS (http://wiki.commonjs.org/wiki/Modules/1.0) e si dice che gli ID di primo livello (come hello) sono risolti dalla "radice spazio concettuale nome del modulo", mentre gli ID relativi (come ./hello) sono risolti contro il modulo di chiamata . Non sono sicuro di quale sia l'una o l'altra delle linee di base, e sospetto che sia questo il problema.

Qualche suggerimento? Posso persino usare require.js da Rhino?

EDIT: Pensare che ho bisogno di impostare l'ambiente come da suggerimento di Pointy nel commento qui sotto, ho provato valutando r.js pure. (Ho provato valutando dopo aver valutato require.js, e poi di nuovo prima require.js.) In entrambi i casi si ottiene un errore:

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) 

"argomenti" sembra essere una variabile in r.js. Penso che sia per gli argomenti della riga di comando, quindi non credo che r.js sia la strada giusta per quello che sto cercando di fare. Non sono sicuro però.

+0

Qualcosa dovrà fornire le API che require.js si aspetta dal browser; ovvero, la libreria utilizza le funzionalità del browser Web per caricare gli script. Cosa stai facendo per renderli disponibili? – Pointy

+0

Probabilmente niente. :-) Di cosa ho bisogno? Ho visto che c'è un compilatore.jar se vuoi usare il compilatore Clojure, ma non sono io. Ho anche visto rhino.jar, ma sembrava che fosse lo stesso per Rhino, che Java 6 già include. –

+0

Beh, non sono sicuro al 100% di ciò che require.js fa, ma per esempio molte di queste librerie recuperano gli script costruendo nuovi tag '