私はrequire.jsを取得して、Java6とRhinoを使用してサーバー側でモジュールをロードしようとしています。
require.js自体を問題なくロードできます。Rhinoは関数を見ることができrequire()
ます。require()
のようなものに変更すると、Rhinoが関数を見つけることができないと文句を言うのでわかりますrequireffdkj()
。
しかし、私が単純なJSでさえ要求しようとすると、hello.js
var hello = 'hello';
次のいずれかを使用します。
require('hello');
require('./hello');
動作しません。私は得る
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)
私はhello.js
Javaクラスパスの一番上にいます。それは私も持っrequire.js
ているところです。hello.js
ハードドライブのルート、ユーザーディレクトリのルート、Javaアプリを実行しているディレクトリなど、移動する可能性のある場所に移動してみました。何も機能しません。
CommonJS仕様(http://wiki.commonjs.org/wiki/Modules/1.0)を調べたところ、トップレベルID(のようなhello
)は「概念的なモジュール名前空間ルート」から解決されるのに対し、相対ID( like ./hello
)は、呼び出し元のモジュールに対して解決されます。これらのベースラインのどちらがどこにあるのかわかりませんが、それが問題だと思います。
助言がありますか?Rhinoのrequire.jsを使用することもできますか?
編集:下のコメントのPointyの提案に従って環境を設定する必要があると考えて、私も評価r.js
してみました。require.js
(私は評価した後、そして再び前に評価しようとしましたrequire.js
。)どちらの場合でも、私はエラーを受け取ります:
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)
「引数」はの変数のようですr.js
。コマンドライン引数用だと思うので、私r.js
がやろうとしていることの正しい道ではないと思います。でもわからない。