- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发构建
选项
在 GraalVM 上运行 JavaScript 可以通过多种选项进行配置。
这些选项用于控制 js 启动器的行为。
-e, --eval:评估 JavaScript 源代码,然后退出引擎。js -e 'print(1+2);'-f, --file:加载并执行提供的脚本文件。请注意,-f选项是可选的,在大多数情况下可以省略,因为传递给js的任何附加参数都将被解释为文件。js -f myfile.js--module:加载并执行提供的模块文件。请注意,.mjs 文件默认被视为模块。js --module myfile.mjs--version:打印 GraalJS 的版本信息,然后退出。--strict:在 JavaScript 的严格模式下执行引擎。
GraalJS 引擎选项 #
有多种选项可以配置 GraalJS 的行为。根据引擎启动方式的不同,这些选项可以传递给启动器或以编程方式传递。
要获取 JavaScript 引擎的完整选项列表,请将 --help:js 标志传递给 js 启动器(GraalVM 22.1 及更高版本可用,更早的版本请使用 --help:languages)。要包含内部选项,请使用 --help:js:internal。请注意,这些列表均包含稳定、受支持和实验性选项。
在命令行上传递选项 #
要将选项传递给 js 启动器,请使用 --js. 语法。例如
js --js.ecmascript-version=2015
使用 Context API 以编程方式传递选项 #
当使用 GraalVM 的 Polyglot API 嵌入到 Java 中时,选项可以通过编程方式传递给 Context 对象。
Context context = Context.newBuilder("js")
.option("js.ecmascript-version", "2015")
.build();
context.eval("js", "42");
有关如何以编程方式设置选项的信息,请参阅 多语言编程 参考。
稳定选项和实验性选项 #
可用选项分为稳定选项和实验性选项。如果使用实验性选项,则需要预先提供一个额外的选项。
使用 js 启动器时,--experimental-options 必须在所有实验性选项之前传递。使用 Context 时,必须在 Context.Builder 上调用 allowExperimentalOptions(true) 选项。有关如何在 ScriptEngine 中使用实验性选项,请参阅 ScriptEngine 实现。
常用稳定选项 #
以下稳定选项经常相关:
--js.ecmascript-version:模拟特定的 ECMAScript 版本。整数值(5,6等,2015-2022)、"latest"(规范的最新支持版本,包括已完成的提案)或"staging"(最新版本,包括受支持的未完成提案)。默认值为"latest"。--js.foreign-object-prototype:为模拟 JavaScript 自身类型(外部数组、对象和函数)的外部对象提供 JavaScript 的默认原型。布尔值,默认值为true。--js.intl-402:启用 ECMAScript 国际化 API。布尔值,默认值为true。--js.regexp-static-result:提供包含上次成功匹配结果的静态RegExp属性,例如RegExp.$1(旧版)。布尔值,默认值为true。--js.strict:为所有脚本启用严格模式。布尔值,默认值为false。--js.console:启用console全局属性。布尔值,默认值为true。--js.allow-eval:允许从字符串生成代码,例如使用eval()或Function构造函数。布尔值,默认值为true。--js.timer-resolution:设置计时函数(例如Date.now()和performance.now())的纳秒级分辨率。默认值:1000000(即 1 毫秒)。--js.unhandled-rejections:配置未处理的 Promise 拒绝跟踪。接受的值为none(默认,不跟踪)、warn(向stderr打印警告)、throw(抛出异常)和handler(调用自定义处理程序)。--js.esm-eval-returns-exports:ES 模块Source的context.eval返回其导出的符号。
如需完整列表,请使用 js --help:js:internal
ECMAScript 版本
--js.ecmascript-version 选项提供与特定 ECMAScript 规范版本的兼容性。它接受整数值,支持版本号(5, 6, ...)和发布年份(从 2015 开始)。截至 GraalVM 21.2,还支持 latest 和 staging。GraalVM 23.1 中的默认版本是 ECMAScript 2023 规范。如果您明确选择该版本和/或启用特定的实验性选项,GraalJS 会实现未来草案规范和开放提案的某些功能。对于生产设置,建议将 ecmascript-version 设置为已发布、最终确定的规范版本(例如 2022)。
可用版本有
5用于 ECMAScript 5.x2015(或6) 用于 ECMAScript 20152016(或7) 用于 ECMAScript 20162017(或8) 用于 ECMAScript 20172018(或9) 用于 ECMAScript 20182019(或10) 用于 ECMAScript 20192020(或11) 用于 ECMAScript 20202021(或12) 用于 ECMAScript 2021 (21.3 中的默认版本)2022(或13) 用于 ECMAScript 2022 (22.0+ 中的默认版本)2023(或14) 用于 ECMAScript 2023 (23.1 中的默认版本)2024(或15) 用于 ECMAScript 2024 (24.1 中的默认版本)latest用于最新支持的语言版本(默认版本)staging用于最新支持的语言特性,包括实验性、不稳定、未完成的 提案 (请勿在生产环境中使用!)
intl-402
--js.intl-402 选项启用 ECMAScript 的 国际化 API。它需要一个布尔值,默认值为 true。
严格模式
--js.strict 选项为所有脚本启用 JavaScript 的严格模式。它需要一个布尔值,默认值为 false。
常用实验性选项 #
请注意,这些选项是实验性的,不保证将来会维护或可用。要使用它们,需要预先提供 --experimental-options 选项。
以下是常用的实验性选项:
--js.nashorn-compat:提供与 Nashorn 引擎的兼容模式。默认将 ECMAScript 版本设置为 5。可能与较新的 ECMAScript 版本冲突。布尔值,默认值为false。--js.timezone:设置本地时区。字符串值,默认值为系统默认。--js.v8-compat:提供与 Google V8 引擎更好的兼容性。布尔值,默认值为false。--js.temporal:启用TemporalAPI。--js.webassembly:启用WebAssemblyAPI。