- 适用于 JDK 23 的 GraalVM(最新)
- 适用于 JDK 24 的 GraalVM(抢先体验版)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发版本
选项
在 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 版本。整数(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
:启用Temporal
API.--js.webassembly
:启用WebAssembly
API。