我需要帮助让Java 7和Rhino 1.7R3支持CommonJS。
Rhino 1.7R3支持CommonJS模块:
Java 7自带Rhino 1.7R3。不幸的是,Java 7的Rhino是一个修改过的版本,它不包含org.mozilla.javascript.commonjs
包:
我想使用Rhino 1.7R3通过javax.script
API支持CommonJS,具体操作如下:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
engine.put("markdown", markdown);
engine.eval("var html = require('./Markdown.Sanitizer').getSanitizingConverter().makeHtml(markdown);");
return (String) engine.get("html");
我通过ScriptEngineManager
验证了我确实使用的是Rhino 1.7R3引擎。我认为,也许我只需要将以下依赖项添加到类路径中。
<dependency>
<groupId>org.mozilla</groupId>
<artifactId>rhino</artifactId>
<version>1.7R3</version>
</dependency>
同时,CommonJS——特别是require()
——应该开始工作了。但它没有。当我尝试使用require()
时,出现了问题。
Caused by: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "require" is not defined. (<Unknown source>#2)
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3773)
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3751)
at sun.org.mozilla.javascript.internal.ScriptRuntime.notFoundError(ScriptRuntime.java:3836)
我该如何让Java 7与Rhino 1.7R3完整版配合使用,以便获得CommonJS支持?
编辑:我找到了以下问题,它涉及完全相同的主题: 疯狂检查:Rhino没有require函数,对吗? 回答者建议也许可以用CommonJS Rhino 1.7R3替换有限的Rhino 1.7R3,但没有说明如何做到这一点。这就是我在这里提问的原因。