选项

在 GraalVM 上运行 JavaScript 可以通过多种选项进行配置。

这些选项用于控制 js 启动器的行为。

  • -e, --eval <code>:评估 JavaScript 源代码,然后退出引擎。
     js -e 'print(1+2);'
    
  • -f, --file <arg>:加载并执行提供的脚本文件。请注意,-f 选项是可选的,在大多数情况下可以省略,因为传递给 js 的任何额外参数都会被解释为文件。
     js -f myfile.js
    
  • --module <arg>:加载并执行提供的模块文件。请注意,.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.<option-name>=<value> 语法。例如

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");

有关如何以编程方式设置选项的信息,请参阅 Polyglot Programming 参考文档。

稳定选项和实验性选项 #

可用的选项分为稳定选项和实验性选项。如果使用实验性选项,则需要提前提供额外的选项。

使用 js 启动器时,需要在所有实验性选项之前传递 --experimental-options。当使用 Context 时,需要在 Context.Builder 上调用 allowExperimentalOptions(true) 选项。有关如何在 ScriptEngine 中使用实验性选项的信息,请参阅 ScriptEngine 实现

常用的稳定选项 #

以下稳定选项通常与上下文相关。

  • --js.ecmascript-version:模拟特定的 ECMAScript 版本。整数(56 等、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 规范的兼容性。它需要一个整数值,其中支持版本号(56、…)和出版年份(从 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。

联系我们