我正在尝试使用 Javascript 库 multilang-extract-comments因此我决定使用 Rhino 作为 Javascript 引擎,并使用 Rhinodo 来连接 Rhino 和 NodeJS。然而,我不知道如何实际使用Rhinodo。我查看了使用Rhinodo(用于早午餐、jshint 和课间休息的 Maven 插件)的项目的代码,但我发现代码非常晦涩难懂。我尝试实现如下代码(对我的应用程序进行了一些编辑):
rhinodoBuilder
.destDir(rhinodoDestDir)
.moduleFactory(nodeModuleProvider)
.consoleFactory(wrappingConsoleFactory)
.env(env)
.build(new BaseFunction() {
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
Scriptable brunch = (Scriptable) ScriptableObject.callMethod(cx, scope, "require",
new Object[]{Context.javaToJS("brunch", scope)});
Scriptable options = cx.newObject(scope);
ScriptableObject.putProperty(options, "minify", minify);
System.setProperty("user.dir", userDir.getAbsolutePath());
ScriptRuntime.doTopCall(ScriptableObject.getTypedProperty(brunch, "build", Function.class),
cx, scope, thisObj, new Object[]{
options,
new BaseFunction() {
@Override
public Object call(Context cx, Scriptable scope, Scriptable thisObj, Object[] args) {
return Undefined.instance;
}
}
});
return Undefined.instance;
}
});
(来自 brunch maven 插件)
但是,这段代码对我不起作用。我要么在尝试查找我的 Javascript 库时遇到错误,要么当我使用它应该能够找到的库时(我使用 fs 作为示例),我收到 NullPointerException。有人可以告诉我我在这里缺少什么吗?
注意:Rhinodo 和使用它的 Maven 插件都可以在 MuleSoft's GitHub Repositories 中找到。
最佳答案
我没有找到解决这个问题的方法。然而,如果其他人决定以这种方式使用 Rhinodo,部分问题是我实际上并没有使用 NodeModuleProvider。为了尝试加载所需的 Node 模块,我使用了类似于以下的代码:
// create a module provider for all the node modules in META-INF
String prefix = "META-INF/node_modules/";
String[] moduleNames = {"amodule","anothermodule","modulethethird"};
ArrayList<NodeModuleImpl> moduleList = new ArrayList<NodeModuleImpl>();
for (String module: moduleNames) {
moduleList.add(NodeModuleImplBuilder.fromFolder(prefix+module));
}
NodeModuleProviderImpl nmp = new NodeModuleProviderImpl(moduleList);
然后,我在 RhinodoBuilder.moduleFactory() 方法中使用了 NodeModuleProvider(您可以在问题中的代码片段中看到它的使用)。但是,请注意,您可能必须解决我无法解决的问题:稍后使用从 Rhino 导入的模块。
最后,我认为使用 exec 将我的 javascript 调用为命令更有意义,因此我建议任何其他进行类似操作的人都使用该解决方案。
关于javascript - 使用 Rhino 和 Rhinodo 从 Java 使用 NodeJS 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554990/