gpt4 book ai didi

javascript - 如何使用 GraalVM 从 Java 访问 JS 导出的模块对象?

转载 作者:行者123 更新时间:2023-12-02 08:41:47 25 4
gpt4 key购买 nike

我有一些 JS 代码,大致如下所示:

let ssr = async (arg) => arg || "hello js";
export {ssr as default};

我想从 Java 访问并调用 ssr

我怎样才能做到这一点?

我一直在尝试这样的事情:

var ctx = Context.newBuilder("js")
.allowIO(true)
.allowHostAccess(HostAccess.ALL)
.build();

var ssrResource = new String(Server.class.getResourceAsStream("/ssr.mjs").readAllBytes());

ctx.eval(Source
.newBuilder("js", ssrResource, "ssr.mjs")
.build());
var ssr = ctx.getBindings("js").getMember("ssr");

但这总是返回 null。

最佳答案

从一个模块导出的值可以由另一个模块使用 import 语法导入。例如,您可以使用另一个文件加载您的模块,例如:

// -- some-module-file.mjs
import ssr from 'ssr.mjs'
ssr;

然后通过以下方式执行文件:

File file = loadSomehow("some-module-file.mjs");
Source mainSource = Source.newBuilder("js", file).mimeType("application/javascript+module").build();
Value ssr = context.eval(mainSource);

这里,Value ssr 是您的模块使用 export {ssr as default};

导出的值

关于javascript - 如何使用 GraalVM 从 Java 访问 JS 导出的模块对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61346799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com