3
好了,所以我创建了一个名为test.js
一个JavaScript文件,其中包含下面的代码:RingoJS中预编译的JavaScript模块是如何加载的?
print("It works!");
我通过Rhino JavaScript编译器没有任何错误编译它。然后,我创建了一个名为foo.js
新文件,其中包含下面的代码:当我在林戈运行foo.js
var test = require("./test.class");
现在抛出以下异常和堆栈跟踪:
Uncaught exception:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.ringojs.tools.launcher.Main.run(Main.java:66)
at org.ringojs.tools.launcher.Main.main(Main.java:45)
Caused by: java.lang.NoClassDefFoundError: /home/aaditmshah/test (wrong name: test)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at org.mozilla.javascript.DefiningClassLoader.defineClass(DefiningClassLoader.java:62)
at org.ringojs.engine.ClassModuleLoader.load(ModuleLoader.java:126)
at org.ringojs.engine.ReloadableScript.compileScript(ReloadableScript.java:153)
at org.ringojs.engine.ReloadableScript.getScript(ReloadableScript.java:118)
at org.ringojs.engine.ReloadableScript.exec(ReloadableScript.java:227)
at org.ringojs.engine.ReloadableScript.load(ReloadableScript.java:215)
at org.ringojs.engine.RingoWorker.loadModuleInternal(RingoWorker.java:283)
at org.ringojs.engine.Require.call(Require.java:81)
at org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:97)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3._c_script_0(/home/aaditmshah/foo.js:1)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.call(/home/aaditmshah/foo.js)
at org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426)
at org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3178)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.call(/home/aaditmshah/foo.js)
at org.mozilla.javascript.gen._home_aaditmshah_foo_js_3.exec(/home/aaditmshah/foo.js)
at org.ringojs.engine.ReloadableScript.evaluate(ReloadableScript.java:186)
at org.ringojs.engine.RingoWorker.evaluateScript(RingoWorker.java:315)
at org.ringojs.engine.RhinoEngine.runScript(RhinoEngine.java:186)
at org.ringojs.tools.RingoRunner.run(RingoRunner.java:152)
... 6 more
enter code here
我不知道我在哪里我错了。我有最新版本的Ringo和Rhino 1.7R3。我加入了当前目录到我的类路径前面加上下面一行foo.js
:
addToClasspath(module.resolve("."));
但是,它仍然会产生同样的错误。我不知道如何做这项工作。任何帮助将不胜感激。
其实'.class'扩展是必要的,因为它告诉了'ModuleLoader'该文件是需要的是由Rhino'jsc'工具编译的JavaScript。如果你放弃'.class'扩展名,它会尝试加载同名的'.js'文件。看到下面的提交:https://github.com/ringo/ringojs/commit/20eee6739da7c69bf93c19d544abc2896df6b7a5 – 2012-03-15 14:14:07
@AaditMShah我看着更接近的错误消息,并更新了我的答案。我不知道你是否收到编辑的通知,所以你在这里。 – 2012-03-15 18:06:22
谢谢。这解决了我的问题。感谢您花时间让我明白我的错误。非常感谢。 =) – 2012-03-15 18:10:13