gpt4 book ai didi

java - Graal.js 导入模块导致 org.graalvm.polyglot.PolyglotException : SyntaxError: Expected an operand but found import

转载 作者:太空宇宙 更新时间:2023-11-04 09:14:57 25 4
gpt4 key购买 nike

我正在尝试使用 Grall.js 的实验性 ES 模块支持。我使用以下脚本:ES module "lib"

export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}

和主脚本“script”

import { square, diag } from 'lib';
console.log('square(11)=' + square(11));
console.log('diag(4,3)=' + diag(4, 3));

我使用 graalvm-ce-19.2.1 并通过 JSR 223 在 JVM 中使用 Polyglot运行主脚本。它不会尝试从磁盘上的某个位置加载库,而是抛出:

javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: SyntaxError: script:1:0 Expected an operand but found import
import { square, diag } from 'lib';
^
script:1:30 Expected ; but found lib
import { square, diag } from 'lib';
^
at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:348)
at com.oracle.truffle.js.scriptengine.GraalJSScriptEngine.eval(GraalJSScriptEngine.java:323)

出了什么问题?

最佳答案

文件名有一个约定,会触发将它们视为 ES 模块 - 文件必须以 .mjs 结尾。或者,可以在 org.graalvm.polyglot.Source 对象上使用(非官方)mime 类型 application/javascript+module 。如果没有此 import 语句,则不允许 1

这是使用 Polyglot Source/Context API 时的样子:

String script = "import {x} from 'lib'";

// these two support "import"
Source source1 = Source.newBuilder("js", script, "script.mjs").build();
Source source2 = Source.newBuilder("js", script, "script").mimeType("application/javascript+module").build();

// this one doesn't
//Source source3 = Source.newBuilder("js", script, "script").build();

这是针对 JSR-223 API 的:

javax.script.ScriptEngine engine = factory.getEngineByName("graal.js");
engine.getContext().setAttribute(ScriptEngine.FILENAME, "script.mjs", ScriptContext.ENGINE_SCOPE);

好像还有an older convention - 使用 module: 前缀,但这似乎不再起作用。

关于java - Graal.js 导入模块导致 org.graalvm.polyglot.PolyglotException : SyntaxError: Expected an operand but found import,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59161450/

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