2 回答

TA贡献2011条经验 获得超2个赞
从一个模块导出的值可以由另一个模块使用该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};

TA贡献1805条经验 获得超10个赞
以下java代码
import org.graalvm.polyglot.*;
class Main {
public static void main(String[] args) {
var ctx = Context.newBuilder("js").allowAllAccess(true).build();
ctx.eval("js", "let ssr = async (arg) => arg || \"hello js\"");
var v = ctx.getBindings("js").getMember("ssr");
System.out.println(v.execute());
}
}
输出
Promise{[[PromiseStatus]]: "resolved", [[PromiseValue]]: "hello js"}
在 GraalVM CE 20.0.0 上,所以我认为您构建Source对象的方式有问题。
添加回答
举报