选项

在 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 模块 Sourcecontext.eval 返回其导出的符号。

如需完整列表,请使用 js --help:js:internal

ECMAScript 版本

--js.ecmascript-version 选项提供与特定 ECMAScript 规范版本的兼容性。它接受整数值,支持版本号(5, 6, ...)和发布年份(从 2015 开始)。截至 GraalVM 21.2,还支持 lateststaging。GraalVM 23.1 中的默认版本是 ECMAScript 2023 规范。如果您明确选择该版本和/或启用特定的实验性选项,GraalJS 会实现未来草案规范和开放提案的某些功能。对于生产设置,建议将 ecmascript-version 设置为已发布、最终确定的规范版本(例如 2022)。

可用版本有

  • 5 用于 ECMAScript 5.x
  • 2015 (或 6) 用于 ECMAScript 2015
  • 2016 (或 7) 用于 ECMAScript 2016
  • 2017 (或 8) 用于 ECMAScript 2017
  • 2018 (或 9) 用于 ECMAScript 2018
  • 2019 (或 10) 用于 ECMAScript 2019
  • 2020 (或 11) 用于 ECMAScript 2020
  • 2021 (或 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:启用 Temporal API
  • --js.webassembly:启用 WebAssembly API。

联系我们