首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Rhino和Rhinodo的NodeJS库

使用Rhino和Rhinodo的NodeJS库
EN

Stack Overflow用户
提问于 2017-06-15 05:26:48
回答 1查看 392关注 0票数 1

我试图在Java应用程序中使用Javascript库multilang-extract-comments,因此我决定使用Rhino作为Javascript引擎,并使用Rhinodo作为Rhino和NodeJS之间的接口。然而,我不知道如何实际使用Rhinodo。我看过使用Rhinodo (用于早午餐、jshint和休息的maven插件)的项目的代码,但我发现代码非常晦涩难懂。我尝试实现了如下代码(对我的应用程序进行了一些编辑):

代码语言:javascript
复制
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;
                }
});

(来自早午餐maven插件)

然而,这段代码不适用于我。我要么在尝试查找我的Javascript库时出错,要么当我使用它应该能够找到的库时(我以fs为例),我得到了一个NullPointerException。有人能告诉我我错过了什么吗?

注意: Rhinodo和使用它的maven插件都可以在MuleSoft's GitHub Repositories中找到

EN

回答 1

Stack Overflow用户

发布于 2017-06-20 04:32:37

我没有找到解决这个问题的方法。然而,如果其他人决定以这种方式使用Rhinodo,部分问题是我实际上并没有使用NodeModuleProvider。为了尝试并加载我所需的Node模块,我使用了类似于以下代码:

代码语言:javascript
复制
// 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作为命令调用会更有意义,所以我建议其他执行类似操作的人使用该解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44554990

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档