- 適用於 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");
請參閱多語言程式設計參考文件,以取得關於如何以程式方式設定選項的資訊。
穩定與實驗性選項 #
可用的選項會區分為穩定和實驗性選項。如果使用實驗性選項,則必須預先提供額外的選項。
使用 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。