命令列 API#

Node.js 附帶各種 CLI 選項。這些選項公開內建除錯、執行腳本的各種方式,以及其他有用的執行時期選項。

若要在終端機中以手冊頁面形式檢視此文件,請執行 man node

摘要#

node [選項] [V8 選項] [<程式進入點> | -e "腳本" | -] [--] [引數]

node inspect [<程式進入點> | -e "腳本" | <主機>:<埠號>] …

node --v8-options

不帶參數執行以啟動 REPL

如需有關 node inspect 的更多資訊,請參閱 除錯器 文件。

程式進入點#

程式進入點是一個類似於規格說明的字串。如果字串不是絕對路徑,則會從目前的作業目錄解析為相對路徑。然後,該路徑會由 CommonJS 模組載入器或 ES 模組載入器 解析,如果傳遞了 --experimental-default-type=module。如果找不到對應的檔案,則會擲回錯誤。

如果找到檔案,則會在下列任何條件下將其路徑傳遞給 ES 模組載入器

  • 程式是以命令列旗標啟動,該旗標強制使用 ECMAScript 模組載入器載入進入點,例如 --import--experimental-default-type=module
  • 檔案具有 .mjs 副檔名。
  • 檔案沒有 .cjs 副檔名,且最近的父層 package.json 檔案包含頂層 "type" 欄位,其值為 "module"

否則,會使用 CommonJS 模組載入器載入檔案。請參閱 模組載入器 以取得更多詳細資料。

ECMAScript 模組載入器進入點注意事項#

載入時,ES 模組載入器 會載入程式進入點,node 指令只會接受副檔名為 .js.mjs.cjs 的檔案作為輸入;當啟用 --experimental-wasm-modules 時,會接受副檔名為 .wasm 的檔案;當傳遞 --experimental-default-type=module 時,會接受沒有副檔名的檔案。

選項#

所有選項,包括 V8 選項,都允許使用破折號 (-) 或底線 (_) 來分隔字詞。例如,--pending-deprecation 等同於 --pending_deprecation

如果傳遞一個只接受單一值的選項 (例如 --max-http-header-size) 超過一次,則會使用最後傳遞的值。命令列的選項優先於透過 NODE_OPTIONS 環境變數傳遞的選項。

-#

stdin 的別名。類似於其他命令列工具中使用 - 的方式,表示腳本從 stdin 讀取,其餘選項傳遞給該腳本。

--#

表示節點選項的結尾。將其餘引數傳遞給腳本。如果在此之前未提供腳本檔名或 eval/print 腳本,則下一個引數會用作腳本檔名。

--abort-on-uncaught-exception#

中斷而非結束會產生核心檔案,以便使用除錯器 (例如 lldbgdbmdb) 進行事後分析。

如果傳遞此標記,仍可透過 process.setUncaughtExceptionCaptureCallback() (以及使用它的 node:domain 模組) 將行為設定為不中斷。

--allow-addons#

穩定性:1.1 - 積極開發

使用 權限模型 時,該程序預設無法使用原生外掛程式。除非使用者在啟動 Node.js 時明確傳遞 --allow-addons 標記,否則嘗試這麼做會擲出 ERR_DLOPEN_DISABLED

範例

// Attempt to require an native addon
require('nodejs-addon-example'); 
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/modules/cjs/loader:1319
  return process.dlopen(module, path.toNamespacedPath(filename));
                 ^

Error: Cannot load native addon because loading addons is disabled.
    at Module._extensions..node (node:internal/modules/cjs/loader:1319:18)
    at Module.load (node:internal/modules/cjs/loader:1091:32)
    at Module._load (node:internal/modules/cjs/loader:938:12)
    at Module.require (node:internal/modules/cjs/loader:1115:19)
    at require (node:internal/modules/helpers:130:18)
    at Object.<anonymous> (/home/index.js:1:15)
    at Module._compile (node:internal/modules/cjs/loader:1233:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1287:10)
    at Module.load (node:internal/modules/cjs/loader:1091:32)
    at Module._load (node:internal/modules/cjs/loader:938:12) {
  code: 'ERR_DLOPEN_DISABLED'
} 

--allow-child-process#

穩定性:1.1 - 積極開發

使用 權限模型 時,預設情況下,程序將無法產生任何子程序。除非使用者在啟動 Node.js 時明確傳遞 --allow-child-process 旗標,否則嘗試這麼做會擲回 ERR_ACCESS_DENIED

範例

const childProcess = require('node:child_process');
// Attempt to bypass the permission
childProcess.spawn('node', ['-e', 'require("fs").writeFileSync("/new-file", "example")']); 
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/child_process:388
  const err = this._handle.spawn(options);
                           ^
Error: Access to this API has been restricted
    at ChildProcess.spawn (node:internal/child_process:388:28)
    at Object.spawn (node:child_process:723:9)
    at Object.<anonymous> (/home/index.js:3:14)
    at Module._compile (node:internal/modules/cjs/loader:1120:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
    at Module.load (node:internal/modules/cjs/loader:998:32)
    at Module._load (node:internal/modules/cjs/loader:839:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'ChildProcess'
} 

--allow-fs-read#

穩定性:1.1 - 積極開發

此旗標使用 權限模型 設定檔案系統讀取權限。

--allow-fs-read 旗標的有效參數為

  • * - 允許所有 FileSystemRead 作業。
  • 可以使用多個 --allow-fs-read 旗標允許多個路徑。範例 --allow-fs-read=/folder1/ --allow-fs-read=/folder1/

不再允許以逗號 (,) 分隔路徑。傳遞單一旗標和逗號時,會顯示警告。

可以在 檔案系統權限 文件中找到範例。

CLI 旗標尚不支援相對路徑。

初始化器模組也需要被允許。考慮以下範例

$ node --experimental-permission t.js
node:internal/modules/cjs/loader:162
  const result = internalModuleStat(filename);
                 ^

Error: Access to this API has been restricted
    at stat (node:internal/modules/cjs/loader:162:18)
    at Module._findPath (node:internal/modules/cjs/loader:640:16)
    at resolveMainPath (node:internal/modules/run_main:15:25)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:53:24)
    at node:internal/main/run_main_module:23:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'FileSystemRead',
  resource: '/Users/rafaelgss/repos/os/node/t.js'
} 

程序需要存取 index.js 模組

node --experimental-permission --allow-fs-read=/path/to/index.js index.js 

--allow-fs-write#

穩定性:1.1 - 積極開發

此旗標使用 權限模型 設定檔案系統寫入權限。

--allow-fs-write 旗標的有效參數為

  • * - 允許所有 FileSystemWrite 作業。
  • 可以使用多個 --allow-fs-read 旗標允許多個路徑。範例 --allow-fs-read=/folder1/ --allow-fs-read=/folder1/

不再允許以逗號 (,) 分隔路徑。傳遞單一旗標和逗號時,會顯示警告。

可以在 檔案系統權限 文件中找到範例。

CLI 旗標不支援相對路徑。

--allow-worker#

穩定性:1.1 - 積極開發

在使用 權限模型 時,該程序在預設情況下無法建立任何工作執行緒。出於安全原因,除非使用者在 Node.js 主程序中明確傳遞旗標 --allow-worker,否則呼叫會擲回 ERR_ACCESS_DENIED

範例

const { Worker } = require('node:worker_threads');
// Attempt to bypass the permission
new Worker(__filename); 
$ node --experimental-permission --allow-fs-read=* index.js
node:internal/worker:188
    this[kHandle] = new WorkerImpl(url,
                    ^

Error: Access to this API has been restricted
    at new Worker (node:internal/worker:188:21)
    at Object.<anonymous> (/home/index.js.js:3:1)
    at Module._compile (node:internal/modules/cjs/loader:1120:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1174:10)
    at Module.load (node:internal/modules/cjs/loader:998:32)
    at Module._load (node:internal/modules/cjs/loader:839:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:17:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'WorkerThreads'
} 

--build-snapshot#

穩定性:1 - 實驗性

在程序結束時產生快照 blob 並將其寫入磁碟,稍後可以使用 --snapshot-blob 載入。

在建立快照時,如果未指定 --snapshot-blob,則會將產生的 blob 預設寫入當前工作目錄中的 snapshot.blob。否則,它會寫入由 --snapshot-blob 指定的路徑。

$ echo "globalThis.foo = 'I am from the snapshot'" > snapshot.js

# Run snapshot.js to initialize the application and snapshot the
# state of it into snapshot.blob.
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js

$ echo "console.log(globalThis.foo)" > index.js

# Load the generated snapshot and start the application from index.js.
$ node --snapshot-blob snapshot.blob index.js
I am from the snapshot 

可以使用 v8.startupSnapshot API 在快照建立時間指定進入點,從而避免在反序列化時間需要額外的進入指令碼

$ echo "require('v8').startupSnapshot.setDeserializeMainFunction(() => console.log('I am from the snapshot'))" > snapshot.js
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js
$ node --snapshot-blob snapshot.blob
I am from the snapshot 

如需更多資訊,請查看 v8.startupSnapshot API 文件。

目前,對執行時間快照的支持是實驗性的,原因在於

  1. 使用者空間模組尚未在快照中獲得支援,因此只能快照化一個單一檔案。不過,使用者可以在建立快照之前,使用他們選擇的打包器將其應用程式打包成單一指令碼。
  2. 內建模組中僅有部分可在快照中運作,儘管 Node.js 核心測試套件檢查出幾個相當複雜的應用程式可以被快照化。更多模組支援正在新增中。如果在建立快照時發生任何崩潰或錯誤行為,請在 Node.js 問題追蹤器 中提交報告,並在 使用者端快照追蹤問題 中連結至該報告。

--build-snapshot-config#

穩定性:1 - 實驗性

指定 JSON 組態檔的路徑,用於設定快照建立行為。

目前支援下列選項

  • builder <string> 必填。提供在建立快照前執行的腳本名稱,就像傳遞 --build-snapshot,並將 builder 作為主要腳本名稱。
  • withoutCodeCache <boolean> 選填。包含程式碼快取會減少編譯包含在快照中函式的時間,但會增加快照大小,並可能破壞快照的可攜性。

使用此標記時,命令列上提供的其他腳本檔將不會執行,而是會被解釋為一般命令列引數。

-c, --check#

語法檢查腳本,而不執行。

--completion-bash#

列印可產生來源的 Node.js bash 完成指令碼。

node --completion-bash > node_bash_completion
source node_bash_completion 

-C 條件--條件=條件#

穩定性:1 - 實驗性

啟用對自訂 條件輸出解析條件的實驗性支援。

允許任意數量的自訂字串條件名稱。

"node""default""import""require" 等 Node.js 預設條件將始終套用,如定義所示。

例如,要執行具有「開發」解析度的模組

node -C development app.js 

--cpu-prof#

穩定性:1 - 實驗性

在啟動時啟動 V8 CPU 分析器,並在結束前將 CPU 分析寫入磁碟。

如果未指定 --cpu-prof-dir,則會將產生的分析置於目前的作業目錄中。

如果未指定 --cpu-prof-name,則會將產生的分析命名為 CPU.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.cpuprofile

$ node --cpu-prof index.js
$ ls *.cpuprofile
CPU.20190409.202950.15293.0.0.cpuprofile 

--cpu-prof-dir#

穩定性:1 - 實驗性

指定 --cpu-prof 產生的 CPU 分析將置於其中的目錄。

預設值由 --diagnostic-dir 命令列選項控制。

--cpu-prof-interval#

穩定性:1 - 實驗性

指定 --cpu-prof 產生的 CPU 分析的微秒取樣間隔。預設為 1000 微秒。

--cpu-prof-name#

穩定性:1 - 實驗性

指定由 --cpu-prof 生成的 CPU 剖析檔案名稱。

--diagnostic-dir=directory#

設定寫入所有診斷輸出檔案的目錄。預設為目前工作目錄。

影響下列預設輸出目錄

--disable-warning=code-or-type#

穩定性:1.1 - 積極開發

依據 codetype 停用特定程序警告。

process.emitWarning() 發出的警告可能包含 codetype。此選項不會發出具有相符 codetype 的警告。

不建議使用的 API 清單

Node.js 核心警告類型為:DeprecationWarningExperimentalWarning

例如,當使用 node --disable-warning=DEP0025 執行下列指令碼時,不會發出 DEP0025 require('node:sys')

import sys from 'node:sys';const sys = require('node:sys');

例如,當使用 node --disable-warning=ExperimentalWarning 執行下列指令碼時,會發出 DEP0025 require('node:sys'),但不會發出任何實驗性警告(例如 ExperimentalWarning: vm.measureMemory 是實驗性功能,v21 以下版本)

import sys from 'node:sys';
import vm from 'node:vm';

vm.measureMemory();const sys = require('node:sys');
const vm = require('node:vm');

vm.measureMemory();

--disable-proto=mode#

停用 Object.prototype.__proto__ 屬性。如果 modedelete,則會完全移除該屬性。如果 modethrow,則存取該屬性會擲回具有 ERR_PROTO_ACCESS 程式碼的例外狀況。

--disallow-code-generation-from-strings#

讓內建語言功能(例如 evalnew Function)從字串產生程式碼時,改為擲回例外狀況。這不會影響 Node.js node:vm 模組。

--dns-result-order=order#

dns.lookup()dnsPromises.lookup() 中設定 verbatim 的預設值。值可以是

  • ipv4first:設定預設 verbatimfalse
  • verbatim:設定預設 verbatimtrue

預設值為 verbatim,而 dns.setDefaultResultOrder() 的優先權高於 --dns-result-order

--enable-fips#

在啟動時啟用符合 FIPS 的加密功能。(需要 Node.js 以符合 FIPS 的 OpenSSL 建置。)

--enable-network-family-autoselection#

啟用家族自動選擇演算法,除非連線選項明確停用它。

--enable-source-maps#

啟用 Source Map v3 以支援堆疊追蹤。

當使用轉譯器(例如 TypeScript)時,應用程式所擲出的堆疊追蹤會參考轉譯後的程式碼,而不是原始程式碼位置。--enable-source-maps 可啟用 Source Map 快取,並盡力回報相對於原始程式碼檔案的堆疊追蹤。

覆寫 Error.prepareStackTrace 可能會阻止 --enable-source-maps 修改堆疊追蹤。請在覆寫函式中呼叫並回傳原始 Error.prepareStackTrace 的結果,以使用 Source Map 修改堆疊追蹤。

const originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (error, trace) => {
  // Modify error and trace and format stack trace with
  // original Error.prepareStackTrace.
  return originalPrepareStackTrace(error, trace);
}; 

請注意,當存取 Error.stack 時,啟用 Source Map 可能會為您的應用程式帶來延遲。如果您在應用程式中頻繁存取 Error.stack,請考量 --enable-source-maps 的效能影響。

--env-file=config#

穩定性:1.1 - 積極開發

從相對於目前目錄的檔案載入環境變數,並在 process.env 上提供給應用程式。會分析並套用用於設定 Node.js 的 環境變數,例如 NODE_OPTIONS。如果在環境和檔案中定義了相同的變數,則環境中的值優先。

您可以傳遞多個 --env-file 參數。後續檔案會覆寫先前檔案中定義的現有變數。

node --env-file=.env --env-file=.development.env index.js 

檔案格式應為每行一組環境變數名稱和值,並以 = 分隔

PORT=3000 

# 之後的任何文字都會視為註解

# This is a comment
PORT=3000 # This is also a comment 

值可以從下列引號開始和結束:\"'。這些引號會從值中省略。

USERNAME="nodejs" # will result in `nodejs` as the value. 

支援多行值

MULTI_LINE="THIS IS
A MULTILINE"
# will result in `THIS IS\nA MULTILINE` as the value. 

略過金鑰前的 Export 關鍵字

export USERNAME="nodejs" # will result in `nodejs` as the value. 

-e--eval "script"#

將下列引數評估為 JavaScript。在 REPL 中預先定義的模組也可以用於 script

在 Windows 上,使用 cmd.exe 時,單引號無法正常運作,因為它只辨識雙引號 " 來引述。在 Powershell 或 Git bash 中,'" 都可以使用。

--experimental-default-type=type#

穩定性:1.0 - 早期開發

定義下列要使用的模組系統,modulecommonjs

  • 如果未指定 --input-type,則透過 --eval 或 STDIN 提供的字串輸入。

  • 如果相同資料夾或任何父資料夾中沒有 package.json 檔案,則以 .js 結尾或沒有副檔名的檔案。

  • 如果最近的父 package.json 欄位沒有 "type" 欄位,則以 .js 結尾或沒有副檔名的檔案;除非 package.json 資料夾或任何父資料夾在 node_modules 資料夾中。

換句話說,--experimental-default-type=module 會將 Node.js 目前預設為 CommonJS 的所有位置,改為預設為 ECMAScript 模組,但為了向後相容,node_modules 以下的資料夾和子資料夾除外。

--experimental-default-type=module--experimental-wasm-modules 下,如果沒有副檔名的檔案以 WebAssembly 魔術數字 (\0asm) 開頭,將會被視為 WebAssembly;否則將會被視為 ES 模組 JavaScript。

--experimental-detect-module#

穩定性:1.0 - 早期開發

Node.js 會檢查不明確輸入的原始碼,以判斷是否包含 ES 模組語法;如果偵測到此類語法,輸入將會被視為 ES 模組。

不明確輸入定義為

  • 具有 .js 副檔名或沒有副檔名的檔案;且沒有控制的 package.json 檔案,或缺少 type 欄位的 package.json 檔案;且未指定 --experimental-default-type
  • 未指定 --input-type--experimental-default-type 時的字串輸入 (--eval 或 STDIN)。

ES 模組語法定義為在評估為 CommonJS 時會引發的語法。這包括 importexport 陳述式,以及 import.meta 參照。包括 import() 運算式,因為它們在 CommonJS 中有效。

--experimental-import-meta-resolve#

啟用實驗性質的 import.meta.resolve() 父 URL 支援,允許傳遞第二個 parentURL 引數進行脈絡解析。

先前封鎖整個 import.meta.resolve 功能。

--experimental-loader=module#

此標記不建議使用,並可能在未來版本的 Node.js 中移除。請改用 --import 搭配 register()

指定包含已匯出的 模組自訂化掛鉤modulemodule 可以是任何字串,可作為 import 規格 接受。

--experimental-network-imports#

穩定性:1 - 實驗性

啟用 import 規格中 https: 協定的實驗性支援。

--experimental-permission#

穩定性:1.1 - 積極開發

為目前程序啟用權限模型。啟用後,以下權限將受到限制

--experimental-policy#

使用指定的檔案作為安全性政策。

--experimental-sea-config#

穩定性:1 - 實驗性

使用此標記可產生一個 blob,此 blob 可注入到 Node.js 二進位檔中,以產生 單一可執行應用程式。請參閱關於 此組態 的文件,以取得詳細資訊。

--experimental-shadow-realm#

使用此標記以啟用 ShadowRealm 支援。

--experimental-test-coverage#

node:test 模組搭配使用時,會產生程式碼覆蓋率報告作為測試執行器輸出的其中一部分。如果未執行任何測試,則不會產生覆蓋率報告。請參閱 從測試收集程式碼覆蓋率 文件以取得更多詳細資訊。

--experimental-vm-modules#

node:vm 模組中啟用實驗性的 ES 模組支援。

--experimental-wasi-unstable-preview1#

啟用實驗性的 WebAssembly 系統介面 (WASI) 支援。

--experimental-wasm-modules#

啟用實驗性的 WebAssembly 模組支援。

--experimental-websocket#

啟用實驗性質的 WebSocket 支援。

--force-context-aware#

停用載入未 具備內容感知 的原生附加元件。

--force-fips#

在啟動時強制使用符合 FIPS 的加密。(無法從腳本程式碼停用。)(與 --enable-fips 相同的要求。)

--force-node-api-uncaught-exceptions-policy#

在 Node-API 非同步回呼中強制執行 uncaughtException 事件。

為了防止現有的附加元件使程序崩潰,此旗標預設未啟用。未來,此旗標將預設啟用,以強制執行正確的行為。

--frozen-intrinsics#

穩定性:1 - 實驗性

啟用實驗性質的凍結內建函數,例如 ArrayObject

僅支援根內容。無法保證 globalThis.Array 確實是預設的內建函數參考。程式碼可能會在這個旗標下中斷。

為了允許新增多載,--require--import 都會在凍結內建函數之前執行。

--heap-prof#

穩定性:1 - 實驗性

在啟動時啟動 V8 堆疊分析器,並在退出前將堆疊分析寫入磁碟。

如果未指定 --heap-prof-dir,則會將產生的分析放置在目前的作業目錄中。

如果未指定 --heap-prof-name,則產生的剖析檔會命名為 Heap.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.heapprofile

$ node --heap-prof index.js
$ ls *.heapprofile
Heap.20190409.202950.15293.0.001.heapprofile 

--heap-prof-dir#

穩定性:1 - 實驗性

指定 --heap-prof 產生的堆積剖析檔放置的目錄。

預設值由 --diagnostic-dir 命令列選項控制。

--heap-prof-interval#

穩定性:1 - 實驗性

指定 --heap-prof 產生的堆積剖析檔的平均抽樣間隔(以位元組為單位)。預設為 512 * 1024 位元組。

--heap-prof-name#

穩定性:1 - 實驗性

指定 --heap-prof 產生的堆積剖析檔的檔案名稱。

--heapsnapshot-near-heap-limit=max_count#

穩定性:1 - 實驗性

當 V8 堆積使用量接近堆積限制時,會將 V8 堆積快照寫入磁碟。count 應為非負整數(Node.js 最多會將 max_count 個快照寫入磁碟)。

在產生快照時,可能會觸發垃圾回收並降低堆積使用率。因此,在 Node.js 執行個體最終用盡記憶體之前,可能會將多個快照寫入磁碟。可以比較這些堆積快照,以確定在連續擷取快照期間配置了哪些物件。無法保證 Node.js 會將確切的 max_count 快照寫入磁碟,但當 max_count 大於 0 時,它會盡力在 Node.js 執行個體用盡記憶體之前產生至少一個快照,最多產生 max_count 個快照。

產生 V8 快照需要時間和記憶體(V8 堆積管理的記憶體和 V8 堆積外部的原生記憶體)。堆積越大,需要的資源就越多。Node.js 會調整 V8 堆積以容納額外的 V8 堆積記憶體開銷,並盡力避免用盡程序可用的所有記憶體。當程序使用的記憶體超過系統認為適當的量時,系統可能會根據系統設定突然終止程序。

$ node --max-old-space-size=100 --heapsnapshot-near-heap-limit=3 index.js
Wrote snapshot to Heap.20200430.100036.49580.0.001.heapsnapshot
Wrote snapshot to Heap.20200430.100037.49580.0.002.heapsnapshot
Wrote snapshot to Heap.20200430.100038.49580.0.003.heapsnapshot

<--- Last few GCs --->

[49580:0x110000000]     4826 ms: Mark-sweep 130.6 (147.8) -> 130.5 (147.8) MB, 27.4 / 0.0 ms  (average mu = 0.126, current mu = 0.034) allocation failure scavenge might not succeed
[49580:0x110000000]     4845 ms: Mark-sweep 130.6 (147.8) -> 130.6 (147.8) MB, 18.8 / 0.0 ms  (average mu = 0.088, current mu = 0.031) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
.... 

--heapsnapshot-signal=signal#

啟用信號處理常式,當收到指定的信號時,會導致 Node.js 程序寫入堆積傾印。signal 必須是有效的信號名稱。預設為停用。

$ node --heapsnapshot-signal=SIGUSR2 index.js &
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
node         1  5.5  6.1 787252 247004 ?       Ssl  16:43   0:02 node --heapsnapshot-signal=SIGUSR2 index.js
$ kill -USR2 1
$ ls
Heap.20190718.133405.15554.0.001.heapsnapshot 

-h, --help#

列印節點命令列選項。此選項的輸出比本文件不詳細。

--icu-data-dir=file#

指定 ICU 資料載入路徑。(覆寫 NODE_ICU_DATA。)

--import=module#

穩定性:1 - 實驗性

在啟動時預載指定的模組。如果多次提供旗標,每個模組將按出現順序依序執行,從 NODE_OPTIONS 中提供的模組開始。

遵循 ECMAScript 模組 解析規則。使用 --require 來載入 CommonJS 模組。使用 --require 預載的模組將在使用 --import 預載的模組之前執行。

--input-type=type#

這會將 Node.js 設定為將 --evalSTDIN 輸入解釋為 CommonJS 或 ES 模組。有效值為 "commonjs""module"。預設值為 "commonjs",除非使用 --experimental-default-type=module

REPL 不支援此選項。與 --print 搭配使用 --input-type=module 會擲回錯誤,因為 --print 不支援 ES 模組語法。

--insecure-http-parser#

在 HTTP 解析器上啟用寬容性旗標。這可能會允許與不符合規範的 HTTP 實作互通。

啟用後,解析器將接受下列內容

  • 無效的 HTTP 標頭值。
  • 無效的 HTTP 版本。
  • 允許訊息同時包含 Transfer-EncodingContent-Length 標頭。
  • Connection: close 存在時,允許訊息後有額外資料。
  • 允許在提供 chunked 之後有額外的傳輸編碼。
  • 允許使用 \n 作為標記分隔符,而不是 \r\n
  • 允許區塊後不提供 \r\n
  • 允許區塊大小後和 \r\n 前出現空格。

以上所有情況都會讓您的應用程式暴露於要求走私或中毒攻擊。請避免使用此選項。

--inspect[=[host:]port]#

host:port 上啟用檢查器。預設為 127.0.0.1:9229

V8 檢查器整合允許 Chrome DevTools 和 IDE 等工具來偵錯和分析 Node.js 執行個體。這些工具透過 TCP 埠連接到 Node.js 執行個體,並使用 Chrome DevTools 通訊協定 進行通訊。

警告:將檢查器繫結至公開 IP:port 組合並不安全#

將檢查器繫結至具有開放埠的公開 IP(包括 0.0.0.0)並不安全,因為它允許外部主機連接到檢查器並執行 遠端程式碼執行 攻擊。

如果指定主機,請確定

  • 主機無法從公開網路存取。
  • 防火牆禁止埠上的不必要連線。

更具體地說,如果埠(預設為 9229)未受防火牆保護,則 --inspect=0.0.0.0 就不安全。

請參閱 偵錯安全性影響 部分以取得更多資訊。

--inspect-brk[=[host:]port]#

host:port 上啟用檢查器,並在使用者腳本開始時中斷。預設的 host:port127.0.0.1:9229

--inspect-port=[host:]port#

在啟用檢查器時設定要使用的 host:port。在透過傳送 SIGUSR1 訊號來啟用檢查器時很有用。

預設主機為 127.0.0.1

請參閱以下關於 host 參數用法的 安全性警告

--inspect-publish-uid=stderr,http#

指定檢查器網路套接字 URL 顯示的方式。

預設情況下,檢查器網路套接字 URL 可在 stderr 中取得,並在 http://host:port/json/list 上的 /json/list 端點中取得。

-i, --interactive#

即使 stdin 看起來不是終端機,也會開啟 REPL。

--jitless#

穩定性:1 - 實驗性。此旗標繼承自 V8,且會受到上游變更的影響。

停用 執行時間配置可執行記憶體。出於安全原因,某些平台可能需要這麼做。它也可以減少其他平台的攻擊面,但效能影響可能會很嚴重。

--max-http-header-size=size#

指定 HTTP 標頭的最大大小(以位元組為單位)。預設為 16 KiB。

--napi-modules#

此選項為無動作。保留此選項以維持相容性。

--no-addons#

停用 node-addons 匯出條件,並停用載入原生附加元件。當指定 --no-addons 時,呼叫 process.dlopen 或需要原生 C++ 附加元件將會失敗並擲回例外。

--no-deprecation#

停用不建議使用的警告。

--no-experimental-fetch#

停用在全域範圍內公開 Fetch API

--no-experimental-global-customevent#

停用在全域範圍內公開 CustomEvent Web API

--no-experimental-global-navigator#

穩定性:1 - 實驗性

停用在全域範圍內公開 Navigator API

--no-experimental-global-webcrypto#

停用在全域範圍內公開 Web Crypto API

--no-experimental-repl-await#

使用此標記停用 REPL 中的頂層 await。

--no-extra-info-on-fatal-exception#

隱藏導致退出之致命例外狀況的額外資訊。

--no-force-async-hooks-checks#

停用 async_hooks 的執行時期檢查。當 async_hooks 啟用時,這些檢查仍會動態啟用。

--no-global-search-paths#

不要從全域路徑(例如 $HOME/.node_modules$NODE_PATH)搜尋模組。

--no-network-family-autoselection#

停用家族自動選取演算法,除非連線選項明確啟用。

--no-warnings#

靜音所有處理程序警告(包括不建議事項)。

--node-memory-debug#

啟用 Node.js 內部記憶體外洩的額外除錯檢查。這通常僅對除錯 Node.js 本身的開發人員有用。

--openssl-config=file#

在啟動時載入 OpenSSL 設定檔。在其他用途當中,如果 Node.js 是針對啟用 FIPS 的 OpenSSL 建置,則可用於啟用符合 FIPS 的加密。

--openssl-legacy-provider#

啟用 OpenSSL 3.0 舊版提供者。如需更多資訊,請參閱 OSSL_PROVIDER-legacy

--openssl-shared-config#

啟用 OpenSSL 預設組態區段 openssl_conf,以從 OpenSSL 組態檔案中讀取。預設組態檔案名稱為 openssl.cnf,但可使用環境變數 OPENSSL_CONF 或命令列選項 --openssl-config 變更。預設 OpenSSL 組態檔案的位置取決於 OpenSSL 如何連結至 Node.js。共用 OpenSSL 組態可能會產生不必要的影響,建議使用特定於 Node.js 的組態區段,即 nodejs_conf,且在未使用此選項時為預設值。

--pending-deprecation#

發出待處理的棄用警告。

待處理的棄用通常與執行時期棄用相同,但值得注意的例外是,它們在預設情況下已關閉,且除非設定 --pending-deprecation 命令列旗標或 NODE_PENDING_DEPRECATION=1 環境變數,否則不會發出。待處理的棄用用於提供一種選擇性的「早期警告」機制,開發人員可以利用它來偵測已棄用的 API 使用情況。

--policy-integrity=sri#

穩定性:1 - 實驗性

指示 Node.js 在執行任何程式碼之前,如果政策沒有指定完整性,則會出錯。它預期 子資源完整性 字串作為參數。

--preserve-symlinks#

指示模組載入器在解析和快取模組時保留符號連結。

預設情況下,當 Node.js 從符號連結到不同磁碟位置的路徑載入模組時,Node.js 會取消連結並使用模組的實際磁碟「真實路徑」作為識別碼和根路徑,以找出其他相依模組。在大部分情況下,此預設行為是可以接受的。但是,當使用符號連結的對等相依項時,如下面的範例所示,如果 moduleA 嘗試將 moduleB 要求為對等相依項,預設行為會導致引發例外狀況

{appDir}
 ├── app
 │   ├── index.js
 │   └── node_modules
 │       ├── moduleA -> {appDir}/moduleA
 │       └── moduleB
 │           ├── index.js
 │           └── package.json
 └── moduleA
     ├── index.js
     └── package.json 

--preserve-symlinks 命令列旗標指示 Node.js 使用模組的符號連結路徑,而不是真實路徑,允許找到符號連結的對等相依項。

但是,請注意使用 --preserve-symlinks 可能會有其他副作用。特別是,如果符號連結的原生模組從相依項樹中的多個位置連結,則可能無法載入(Node.js 會將這些視為兩個獨立的模組,並會嘗試多次載入模組,導致引發例外狀況)。

--preserve-symlinks 旗標不適用於主模組,這允許 node --preserve-symlinks node_module/.bin/<foo> 運作。若要對主模組套用相同的行為,請也使用 --preserve-symlinks-main

--preserve-symlinks-main#

指示模組載入器在解析和快取主模組 (require.main) 時保留符號連結。

此旗標的存在是為了讓主模組可以選擇與 --preserve-symlinks 提供給所有其他匯入的相同行為;不過,它們是不同的旗標,以維持與舊版 Node.js 版本的相容性。

--preserve-symlinks-main 不暗示 --preserve-symlinks;在解析相對路徑之前不希望追蹤符號連結時,請使用 --preserve-symlinks-main 搭配 --preserve-symlinks

請參閱 --preserve-symlinks 以取得更多資訊。

-p--print "script"#

-e 相同,但會印出結果。

--prof#

產生 V8 分析器輸出。

--prof-process#

處理使用 V8 選項 --prof 產生的 V8 分析器輸出。

--redirect-warnings=file#

將處理程序警告寫入指定檔案,而不是列印到 stderr。如果檔案不存在,將會建立檔案;如果檔案存在,將會附加到檔案。如果在嘗試將警告寫入檔案時發生錯誤,警告將會寫入 stderr。

file 名稱可以是絕對路徑。如果不是,預設寫入目錄會由 --diagnostic-dir 命令列選項控制。

--report-compact#

以精簡格式撰寫報告,單行 JSON,比為人閱讀而設計的預設多行格式更易於日誌處理系統使用。

--report-dir=directory, report-directory=directory#

產生報告的位置。

--report-filename=filename#

撰寫報告時使用的檔案名稱。

如果檔案名稱設定為 'stdout''stderr',報告會分別寫入程序的 stdout 或 stderr。

--report-on-fatalerror#

啟用報告,以便在導致應用程式終止的致命錯誤(Node.js 執行階段內部的錯誤,例如記憶體不足)時觸發。有助於檢查各種診斷資料元素,例如堆積、堆疊、事件迴圈狀態、資源使用量等,以推論致命錯誤。

--report-on-signal#

啟用報告,以便在執行中的 Node.js 程序收到指定的(或預先定義的)訊號時產生。觸發報告的訊號透過 --report-signal 指定。

--report-signal=signal#

設定或重設報告產生訊號(Windows 不支援)。預設訊號為 SIGUSR2

--report-uncaught-exception#

當處理程序因未捕捉到的例外狀況而結束時,啟用報告產生。在檢查 JavaScript 堆疊與原生堆疊及其他執行時期環境資料時很有用。

-r--require module#

在啟動時預載指定的模組。

遵循 require() 的模組解析規則。module 可以是檔案路徑或節點模組名稱。

僅支援 CommonJS 模組。使用 --import 預載 ECMAScript 模組。使用 --require 預載的模組會在使用 --import 預載的模組之前執行。

--secure-heap=n#

初始化 n 位元的 OpenSSL 安全堆疊。初始化時,安全堆疊會用於在金鑰產生及其他作業期間,OpenSSL 內部特定類型的配置。例如,這有助於防止敏感資訊因指標溢位或不足而外洩。

安全堆疊為固定大小,在執行時期無法調整大小,因此如果使用,請務必選擇足夠大的堆疊來涵蓋所有應用程式使用。

提供的堆疊大小必須是 2 的次方。任何小於 2 的值都會停用安全堆疊。

預設停用安全堆疊。

Windows 上不提供安全堆疊。

有關更多詳細資訊,請參閱 CRYPTO_secure_malloc_init

--secure-heap-min=n#

在使用 --secure-heap 時,--secure-heap-min 旗標會指定安全堆中的最小配置。最小值為 2。最大值為 --secure-heap2147483647 中較小的值。所提供的數值必須為 2 的次方。

--snapshot-blob=path#

穩定性:1 - 實驗性

--build-snapshot 搭配使用時,--snapshot-blob 會指定所產生的快照 blob 寫入的路徑。如果未指定,產生的 blob 會寫入至目前工作目錄中的 snapshot.blob

在不使用 --build-snapshot 的情況下,--snapshot-blob 會指定用於還原應用程式狀態的 blob 路徑。

在載入快照時,Node.js 會檢查下列事項:

  1. 執行中 Node.js 二進位檔的版本、架構和平台與產生快照的二進位檔完全相同。
  2. V8 旗標和 CPU 功能與產生快照的二進位檔相容。

如果兩者不符,Node.js 會拒絕載入快照,並以狀態碼 1 退出。

--test#

啟動 Node.js 命令列測試執行器。此旗標無法與 --watch-path--check--eval--interactive 或檢查器結合使用。請參閱 從命令列執行測試 文件以取得更多詳細資料。

--test-concurrency#

測試執行器 CLI 將同時執行的最大測試檔案數量。預設值為 os.availableParallelism() - 1

--test-name-pattern#

正規表示式,用於設定測試執行器,僅執行名稱符合所提供模式的測試。請參閱 依名稱篩選測試 文件以取得更多詳細資料。

--test-only#

設定測試執行器,僅執行已設定 only 選項的頂層測試。

--test-reporter#

執行測試時要使用的測試報告器。請參閱 測試報告器 文件以取得更多詳細資料。

--test-reporter-destination#

對應測試報告器的目的地。請參閱 測試報告器 文件以取得更多詳細資料。

--test-shard#

測試套件分片以 <index>/<total> 格式執行,其中

index 為正整數,分割部分的索引 total 為正整數,分割部分的總數 此命令會將所有測試檔案分成 total 等份,並只執行位於 index 部分的檔案。

例如,若要將測試套件分成三部分,請使用下列指令

node --test --test-shard=1/3
node --test --test-shard=2/3
node --test --test-shard=3/3 

--test-timeout#

測試執行失敗後的一段毫秒數。如果未指定,子測試會繼承其父項目的這個值。預設值為 Infinity

--throw-deprecation#

拋出棄用錯誤。

--title=title#

在啟動時設定 process.title

--tls-cipher-list=list#

指定替代的預設 TLS 加密清單。需要使用加密支援來建置 Node.js(預設)。

--tls-keylog=file#

將 TLS 金鑰資料記錄到檔案。金鑰資料採用 NSS SSLKEYLOGFILE 格式,軟體(例如 Wireshark)可以使用它來解密 TLS 流量。

--tls-max-v1.2#

tls.DEFAULT_MAX_VERSION 設定為「TLSv1.2」。用於停用對 TLSv1.3 的支援。

--tls-max-v1.3#

將預設 tls.DEFAULT_MAX_VERSION 設定為「TLSv1.3」。用於啟用對 TLSv1.3 的支援。

--tls-min-v1.0#

將預設 tls.DEFAULT_MIN_VERSION 設為「TLSv1」。用於與舊版 TLS 客戶端或伺服器相容。

--tls-min-v1.1#

將預設 tls.DEFAULT_MIN_VERSION 設為「TLSv1.1」。用於與舊版 TLS 客戶端或伺服器相容。

--tls-min-v1.2#

將預設 tls.DEFAULT_MIN_VERSION 設為「TLSv1.2」。這是 12.x 及後續版本的預設值,但此選項支援與舊版 Node.js 版本相容。

--tls-min-v1.3#

將預設 tls.DEFAULT_MIN_VERSION 設為「TLSv1.3」。用於停用對 TLSv1.2 的支援,因為它不如 TLSv1.3 安全。

--trace-atomics-wait#

穩定性:0 - 已標示為不建議使用

將對 Atomics.wait() 的呼叫印出簡短摘要至 stderr。輸出可能如下所示

(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 1, inf) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 1, inf) did not wait because the values mismatched
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 0, 10) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 0, 0, 10) timed out
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 4, 0, inf) started
(node:15701) [Thread 1] Atomics.wait(&lt;address> + 4, -1, inf) started
(node:15701) [Thread 0] Atomics.wait(&lt;address> + 4, 0, inf) was woken up by another thread
(node:15701) [Thread 1] Atomics.wait(&lt;address> + 4, -1, inf) was woken up by another thread 

此處的欄位對應至

  • worker_threads.threadId 給出的執行緒 ID
  • 有問題的 SharedArrayBuffer 的基本位址,以及對應於傳遞給 Atomics.wait() 的索引的位元組偏移量
  • 傳遞給 Atomics.wait() 的預期值
  • 傳遞給 Atomics.wait 的逾時

--trace-deprecation#

列印棄用堆疊追蹤。

--trace-event-categories#

使用 --trace-events-enabled 啟用追蹤事件追蹤時,應追蹤的類別清單(以逗號分隔)。

--trace-event-file-pattern#

指定追蹤事件資料檔案路徑的範本字串,支援 ${rotation}${pid}

--trace-events-enabled#

啟用追蹤事件追蹤資訊的收集。

--trace-exit#

在主動退出環境(例如呼叫 process.exit())時列印堆疊追蹤。

--trace-sigint#

在 SIGINT 上列印堆疊追蹤。

--trace-sync-io#

在事件迴圈的第一個執行週期後偵測到同步 I/O 時,列印堆疊追蹤。

--trace-tls#

將 TLS 封包追蹤資訊列印到 stderr。這可以用於除錯 TLS 連線問題。

--trace-uncaught#

列印未捕捉到例外狀況的堆疊追蹤;通常,會列印與建立 Error 相關的堆疊追蹤,而這會讓 Node.js 也列印與拋出值相關的堆疊追蹤(不一定要是 Error 執行個體)。

啟用此選項可能會對垃圾收集行為產生負面影響。

--trace-warnings#

列印處理程序警告的堆疊追蹤(包括不建議使用的函式)。

--track-heap-objects#

追蹤堆疊快照的堆疊物件配置。

--unhandled-rejections=mode#

使用此旗標可以變更在發生未處理的拒絕時應採取的動作。可以選擇下列模式之一

  • throw:發出 unhandledRejection。如果未設定此掛鉤,則會將未處理的拒絕當作未捕捉的例外狀況引發。這是預設值。
  • strict:將未處理的拒絕當作未捕捉的例外狀況引發。如果處理了例外狀況,則會發出 unhandledRejection
  • warn:不論是否設定 unhandledRejection 掛鉤,都會觸發警告,但不會印出不建議使用的警告。
  • warn-with-error-code:發出 unhandledRejection。如果未設定此掛鉤,則會觸發警告,並將處理序退出碼設定為 1。
  • none:不顯示任何警告。

如果在命令列進入點的 ES 模組靜態載入階段發生拒絕,它將始終將其引發為未捕捉的例外狀況。

--use-bundled-ca--use-openssl-ca#

使用由目前 Node.js 版本提供的綑綁 Mozilla CA 儲存區,或使用 OpenSSL 的預設 CA 儲存區。預設儲存區可在建置時選擇。

Node.js 提供的綑綁 CA 儲存區是 Mozilla CA 儲存區的快照,在發布時已固定。它在所有受支援的平台上都是相同的。

使用 OpenSSL 儲存區允許外部修改儲存區。對於大多數 Linux 和 BSD 發行版,此儲存區由發行版維護人員和系統管理員維護。OpenSSL CA 儲存區位置取決於 OpenSSL 函式庫的組態,但可以在執行階段使用環境變數變更。

請參閱 SSL_CERT_DIRSSL_CERT_FILE

--use-largepages=mode#

在啟動時將 Node.js 靜態程式碼重新對應到大記憶體頁面。如果目標系統支援,這將導致 Node.js 靜態程式碼移至 2 MiB 頁面,而不是 4 KiB 頁面。

下列值對 mode 有效

  • off:不會嘗試對應。這是預設值。
  • on:如果作業系統支援,將嘗試對應。對應失敗將會被忽略,並會將訊息列印至標準錯誤。
  • silent:如果作業系統支援,將嘗試對應。對應失敗將會被忽略,且不會回報。

--v8-options#

列印 V8 命令列選項。

--v8-pool-size=num#

設定 V8 的執行緒池大小,將用於配置背景工作。

如果設定為 0,則 Node.js 會根據並行處理量的估計值,選擇適當的執行緒池大小。

並行處理量是指在特定機器上可以同時執行的運算數量。一般來說,它與 CPU 數量相同,但可能會在 VM 或容器等環境中有所不同。

-v, --version#

列印 Node.js 版本。

--watch#

穩定性:1 - 實驗性

在監控模式下啟動 Node.js。在監控模式下,受監控檔案的變更會導致 Node.js 程序重新啟動。預設情況下,監控模式將監控進入點和任何必需或匯入的模組。使用 --watch-path 指定要監控的路徑。

此標記無法與 --check--eval--interactive 或 REPL 結合使用。

node --watch index.js 

--watch-path#

穩定性:1 - 實驗性

在監控模式下啟動 Node.js,並指定要監控的路徑。在監控模式下,受監控路徑中的變更會導致 Node.js 程序重新啟動。這將關閉對必需或導入模組的監控,即使與 --watch 結合使用時也是如此。

此標記不能與 --check--eval--interactive--test 或 REPL 結合使用。

node --watch-path=./src --watch-path=./tests index.js 

此選項僅在 macOS 和 Windows 上受支援。當在不支援此選項的平台上使用此選項時,將會擲出 ERR_FEATURE_UNAVAILABLE_ON_PLATFORM 例外。

--watch-preserve-output#

在監控模式重新啟動程序時,停用清除主控台。

node --watch --watch-preserve-output test.js 

--zero-fill-buffers#

自動將所有新配置的 BufferSlowBuffer 執行個體填滿零。

環境變數#

FORCE_COLOR=[1, 2, 3]#

FORCE_COLOR 環境變數用於啟用 ANSI 彩色輸出。值可能是

  • 1true 或空字串 '' 表示支援 16 色,
  • 2 表示支援 256 色,或
  • 3 表示支援 1600 萬色。

當使用 FORCE_COLOR 並將其設定為受支援的值時,NO_COLORNODE_DISABLE_COLORS 環境變數都會被忽略。

任何其他值都會導致彩色輸出被停用。

NO_COLOR=<any>#

NO_COLORNODE_DISABLE_COLORS 的別名。環境變數的值是任意的。

NODE_DEBUG=module[,…]#

',' 分隔的核心模組清單,這些模組應該印出偵錯資訊。

NODE_DEBUG_NATIVE=module[,…]#

',' 分隔的核心 C++ 模組清單,這些模組應該印出偵錯資訊。

NODE_DISABLE_COLORS=1#

設定後,REPL 中將不會使用顏色。

NODE_EXTRA_CA_CERTS=file#

設定後,已知的「根」CA(例如 VeriSign)將會擴充為 file 中的額外憑證。該檔案應包含一個或多個 PEM 格式的可信憑證。如果檔案遺失或格式錯誤,將會發出一個訊息(一次)使用 process.emitWarning(),但其他錯誤將被忽略。

當 TLS 或 HTTPS 用戶端或伺服器明確指定 ca 選項屬性時,已知的憑證和額外的憑證都不會被使用。

node 以 setuid root 執行或設定 Linux 檔案功能時,此環境變數將被忽略。

NODE_EXTRA_CA_CERTS 環境變數僅在 Node.js 程序首次啟動時讀取。使用 process.env.NODE_EXTRA_CA_CERTS 在執行階段變更值,不會對目前的程序產生影響。

NODE_ICU_DATA=file#

ICU (Intl 物件) 資料的資料路徑。在編譯時支援小型 ICU 時,將會延伸連結的資料。

NODE_NO_WARNINGS=1#

設定為 1 時,會將程序警告靜音。

NODE_OPTIONS=options...#

以空白分隔的命令列選項清單。options... 會在命令列選項之前進行解譯,因此命令列選項會覆寫或合併 options... 中的任何內容。如果使用環境中不允許的選項,例如 -p 或腳本檔案,Node.js 會傳回錯誤並結束。

如果選項值包含空白,可以使用雙引號來跳脫

NODE_OPTIONS='--require "./my path/file.js"' 

傳遞為命令列選項的單例旗標會覆寫傳遞至 NODE_OPTIONS 的相同旗標

# The inspector will be available on port 5555
NODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555 

可以傳遞多次的旗標,會視為其 NODE_OPTIONS 執行個體先傳遞,然後再傳遞其命令列執行個體

NODE_OPTIONS='--require "./a.js"' node --require "./b.js"
# is equivalent to:
node --require "./a.js" --require "./b.js" 

允許的 Node.js 選項為

  • --allow-addons
  • --allow-child-process
  • --allow-fs-read
  • --allow-fs-write
  • --allow-worker
  • --conditions, -C
  • --diagnostic-dir
  • --disable-proto
  • --disable-warning
  • --dns-result-order
  • --enable-fips
  • --enable-network-family-autoselection
  • --enable-source-maps
  • --experimental-abortcontroller
  • --experimental-default-type
  • --experimental-detect-module
  • --experimental-import-meta-resolve
  • --experimental-json-modules
  • --experimental-loader
  • --experimental-modules
  • --experimental-network-imports
  • --experimental-permission
  • --experimental-policy
  • --experimental-shadow-realm
  • --experimental-specifier-resolution
  • --experimental-top-level-await
  • --experimental-vm-modules
  • --experimental-wasi-unstable-preview1
  • --experimental-wasm-modules
  • --experimental-websocket
  • --force-context-aware
  • --force-fips
  • --force-node-api-uncaught-exceptions-policy
  • --frozen-intrinsics
  • --heapsnapshot-near-heap-limit
  • --heapsnapshot-signal
  • --http-parser
  • --icu-data-dir
  • --import
  • --input-type
  • --insecure-http-parser
  • --inspect-brk
  • --inspect-port--debug-port
  • --inspect-publish-uid
  • --inspect
  • --max-http-header-size
  • --napi-modules
  • --no-addons
  • --no-deprecation
  • --no-experimental-fetch
  • --no-experimental-global-customevent
  • --no-experimental-global-navigator
  • --no-experimental-global-webcrypto
  • --no-experimental-repl-await
  • --no-extra-info-on-fatal-exception
  • --no-force-async-hooks-checks
  • --no-global-search-paths
  • --no-network-family-autoselection
  • --no-warnings
  • --node-memory-debug
  • --openssl-config
  • --openssl-legacy-provider
  • --openssl-shared-config
  • --pending-deprecation
  • --policy-integrity
  • --preserve-symlinks-main
  • --preserve-symlinks
  • --prof-process
  • --redirect-warnings
  • --report-compact
  • --report-dir--report-directory
  • --report-filename
  • --report-on-fatalerror
  • --report-on-signal
  • --report-signal
  • --report-uncaught-exception
  • --require-r
  • --secure-heap-min
  • --secure-heap
  • --snapshot-blob
  • --test-only
  • --test-reporter-destination
  • --test-reporter
  • --test-shard
  • --throw-deprecation
  • --title
  • --tls-cipher-list
  • --tls-keylog
  • --tls-max-v1.2
  • --tls-max-v1.3
  • --tls-min-v1.0
  • --tls-min-v1.1
  • --tls-min-v1.2
  • --tls-min-v1.3
  • --trace-atomics-wait
  • --trace-deprecation
  • --trace-event-categories
  • --trace-event-file-pattern
  • --trace-events-enabled
  • --trace-exit
  • --trace-sigint
  • --trace-sync-io
  • --trace-tls
  • --trace-uncaught
  • --trace-warnings
  • --track-heap-objects
  • --unhandled-rejections
  • --use-bundled-ca
  • --use-largepages
  • --use-openssl-ca
  • --v8-pool-size
  • --watch-path
  • --watch-preserve-output
  • --watch
  • --zero-fill-buffers

允許的 V8 選項包括

  • --abort-on-uncaught-exception
  • --disallow-code-generation-from-strings
  • --enable-etw-stack-walking
  • --huge-max-old-generation-size
  • --interpreted-frames-native-stack
  • --jitless
  • --max-old-space-size
  • --max-semi-space-size
  • --perf-basic-prof-only-functions
  • --perf-basic-prof
  • --perf-prof-unwinding-info
  • --perf-prof
  • --stack-trace-limit

--perf-basic-prof-only-functions--perf-basic-prof--perf-prof-unwinding-info--perf-prof 僅在 Linux 上可用。

--enable-etw-stack-walking 僅在 Windows 上可用。

NODE_PATH=path[:…]#

':' 分隔的目錄清單,加到模組搜尋路徑之前。

在 Windows 上,這是一個以 ';' 分隔的清單。

NODE_PENDING_DEPRECATION=1#

設為 1 時,發出待處理的棄用警告。

待處理的棄用通常與執行時期棄用相同,但值得注意的例外是,它們在預設情況下已關閉,且除非設定 --pending-deprecation 命令列旗標或 NODE_PENDING_DEPRECATION=1 環境變數,否則不會發出。待處理的棄用用於提供一種選擇性的「早期警告」機制,開發人員可以利用它來偵測已棄用的 API 使用情況。

NODE_PENDING_PIPE_INSTANCES=instances#

設定管道伺服器等待連線時,待處理的管道執行個體控制代數。此設定僅適用於 Windows。

NODE_PRESERVE_SYMLINKS=1#

設為 1 時,指示模組載入器在解析和快取模組時保留符號連結。

NODE_REDIRECT_WARNINGS=file#

設定時,處理警告會發送到指定的檔案,而不是列印到 stderr。如果檔案不存在,將會建立檔案,如果檔案存在,則會附加到檔案。如果在嘗試將警告寫入檔案時發生錯誤,警告將會寫入 stderr。這等同於使用指令列旗標 --redirect-warnings=file

NODE_REPL_EXTERNAL_MODULE=file#

Node.js 模組的路徑,將載入此模組取代內建 REPL。將此值覆寫為空字串 ('') 將會使用內建 REPL。

NODE_REPL_HISTORY=file#

用於儲存持續 REPL 歷程記錄的檔案路徑。預設路徑為 ~/.node_repl_history,會被此變數覆寫。將值設定為空字串 (''' ') 會停用持續 REPL 歷程記錄。

NODE_SKIP_PLATFORM_CHECK=value#

如果 value 等於 '1',Node.js 啟動期間將會略過支援平台的檢查。Node.js 可能無法正確執行。在不受支援的平台上遇到的任何問題都不會修復。

NODE_TEST_CONTEXT=value#

如果 value 等於 'child',測試報告員選項將會被覆寫,測試輸出將會以 TAP 格式傳送到 stdout。如果提供任何其他值,Node.js 不保證所使用的報告員格式或其穩定性。

NODE_TLS_REJECT_UNAUTHORIZED=value#

如果 value 等於 '0',則會停用 TLS 連線的憑證驗證。這會讓 TLS,以及擴充的 HTTPS,變得不安全。強烈建議不要使用這個環境變數。

NODE_V8_COVERAGE=dir#

設定後,Node.js 會開始將 V8 JavaScript 程式碼涵蓋率原始碼對應表 資料輸出到作為引數提供的目錄(涵蓋率資訊會以 JSON 格式寫入到檔名前綴為 coverage 的檔案中)。

NODE_V8_COVERAGE 會自動傳播到子程序,讓編寫會呼叫 child_process.spawn() 函式家族的應用程式變得更容易。NODE_V8_COVERAGE 可以設定為空字串,以防止傳播。

涵蓋率輸出#

涵蓋率會以頂層金鑰 result 上的 ScriptCoverage 物件陣列輸出。

{
  "result": [
    {
      "scriptId": "67",
      "url": "internal/tty.js",
      "functions": []
    }
  ]
} 
原始碼對應表快取#

穩定性:1 - 實驗性

如果找到,原始碼對應表資料會附加到 JSON 涵蓋率物件的頂層金鑰 source-map-cache 上。

source-map-cache 是物件,其金鑰代表已萃取來源對應的檔案,而值包含原始來源對應的 URL(金鑰為 url)、已剖析的來源對應 v3 資訊(金鑰為 data)以及來源檔案的行長(金鑰為 lineLengths)。

{
  "result": [
    {
      "scriptId": "68",
      "url": "file:///absolute/path/to/source.js",
      "functions": []
    }
  ],
  "source-map-cache": {
    "file:///absolute/path/to/source.js": {
      "url": "./path-to-map.json",
      "data": {
        "version": 3,
        "sources": [
          "file:///absolute/path/to/original.js"
        ],
        "names": [
          "Foo",
          "console",
          "info"
        ],
        "mappings": "MAAMA,IACJC,YAAaC",
        "sourceRoot": "./"
      },
      "lineLengths": [
        13,
        62,
        38,
        27
      ]
    }
  }
} 

OPENSSL_CONF=file#

在啟動時載入 OpenSSL 組態檔。這可做為其他用途,例如在使用 ./configure --openssl-fips 建置 Node.js 時,可啟用符合 FIPS 的加密。

如果使用 --openssl-config 命令列選項,則會略過環境變數。

SSL_CERT_DIR=dir#

如果已啟用 --use-openssl-ca,這會覆寫並設定 OpenSSL 包含受信任憑證的目錄。

請注意,除非明確設定子環境,否則此環境變數會由任何子處理序繼承,如果這些子處理序使用 OpenSSL,可能會導致它們信任與 node 相同的 CA。

SSL_CERT_FILE=file#

如果已啟用 --use-openssl-ca,這會覆寫並設定 OpenSSL 包含受信任憑證的檔案。

請注意,除非明確設定子環境,否則此環境變數會由任何子處理序繼承,如果這些子處理序使用 OpenSSL,可能會導致它們信任與 node 相同的 CA。

TZ#

TZ 環境變數用於指定時區組態。

雖然 Node.js 不支援所有 其他環境處理 TZ 的方式,但它確實支援基本的 時區 ID(例如 'Etc/UTC''Europe/Paris''America/New_York')。它可能支援一些其他縮寫或別名,但強烈不建議使用,且不保證。

$ TZ=Europe/Dublin node -pe "new Date().toString()"
Wed May 12 2021 20:30:48 GMT+0100 (Irish Standard Time) 

UV_THREADPOOL_SIZE=size#

將 libuv 的執行緒池中使用的執行緒數量設定為 size 個執行緒。

Node.js 盡可能使用非同步系統 API,但如果沒有這些 API,則會使用 libuv 的執行緒池,以基於同步系統 API 建立非同步節點 API。使用執行緒池的 Node.js API 為

  • 除了檔案監控 API 和明確為同步的其他所有 fs API
  • 非同步加密 API,例如 crypto.pbkdf2()crypto.scrypt()crypto.randomBytes()crypto.randomFill()crypto.generateKeyPair()
  • dns.lookup()
  • 除了明確為同步的其他所有 zlib API

由於 libuv 的執行緒池大小固定,這表示如果任何這些 API 因為某些原因而花費很長的時間,則在 libuv 執行緒池中執行的其他(看似無關的)API 將會遭遇效能下降。為了減輕這個問題,一個可能的解決方案是透過將 'UV_THREADPOOL_SIZE' 環境變數設定為大於 4(目前的預設值)的值,來增加 libuv 執行緒池的大小。如需更多資訊,請參閱 libuv 執行緒池文件

UV_USE_IO_URING=value#

在受支援的平台上啟用或停用 libuv 使用 io_uring

在受支援的平台上,io_uring 可以大幅提升各種非同步 I/O 作業的效能。

由於安全性考量,io_uring 預設為停用。當 io_uring 啟用時,應用程式不得在執行階段變更程序的使用者身分。在這種情況下,JavaScript 函式(例如 process.setuid())將無法使用,而且原生附加元件不得呼叫系統函式(例如 setuid(2))。

這個環境變數是由 Node.js 的相依項實作,而且可能會在 Node.js 的未來版本中移除。不提供此環境變數行為的穩定性保證。

有用的 V8 選項#

V8 有其自己的 CLI 選項集。提供給 node 的任何 V8 CLI 選項都將傳遞給 V8 處理。V8 的選項沒有穩定性保證。V8 團隊本身並不認為它們是其正式 API 的一部分,並保留隨時更改它們的權利。同樣地,它們也不受 Node.js 穩定性保證的約束。許多 V8 選項僅對 V8 開發人員感興趣。儘管如此,仍有一小部分 V8 選項廣泛適用於 Node.js,並且在此處記錄

--max-old-space-size=SIZE(以 MB 為單位)#

設定 V8 舊記憶體區段的最大記憶體大小。隨著記憶體消耗接近限制,V8 將花費更多時間進行垃圾回收,以釋放未使用的記憶體。

在具有 2 GiB 記憶體的機器上,考慮將其設定為 1536(1.5 GiB)以留出一些記憶體供其他用途並避免交換。

node --max-old-space-size=1536 index.js 

--max-semi-space-size=SIZE(以 MB 為單位)#

設定 V8 的半空間清除垃圾回收器 的最大半空間大小(以 MiB(MB)為單位)。增加半空間的最大大小可能會提高 Node.js 的吞吐量,但代價是消耗更多記憶體。

由於 V8 堆的年輕世代大小是半空間大小的三倍(請參閱 V8 中的 YoungGenerationSizeFromSemiSpaceSize),半空間增加 1 MiB 會套用至三個個別半空間,並導致堆大小增加 3 MiB。處理量改善取決於您的工作負載(請參閱 #42511)。

64 位元系統的預設值為 16 MiB,32 位元系統的預設值為 8 MiB。若要取得應用程式的最佳設定,您應在執行應用程式基準測試時嘗試不同的 max-semi-space-size 值。

例如,在 64 位元系統上執行基準測試

for MiB in 16 32 64 128; do
    node --max-semi-space-size=$MiB index.js
done