- 适用于 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
:启用Temporal
API。--js.webassembly
:启用WebAssembly
API。