選項

在 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 版本。整數值(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。

與我們聯繫