命令列 API#

Node.js 提供了多種命令列(CLI)選項。這些選項公開了內建的除錯功能、多種執行指令碼的方式以及其他有用的執行時選項。

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

摘要#

node [options] [V8 options] [<program-entry-point> | -e "script" | -] [--] [arguments]

node inspect [<program-entry-point> | -e "script" | <host>:<port>] …

node --v8-options

在不帶引數的情況下執行以啟動 REPL

有關 node inspect 的更多資訊,請參閱偵錯程式文件。

程式入口點#

程式入口點是一個類似說明符的字串。如果該字串不是絕對路徑,則會將其解析為相對於當前工作目錄的路徑。然後該路徑由 CommonJS 模組載入器解析。如果找不到相應的檔案,則會丟擲錯誤。

如果找到檔案,在以下任一情況下,其路徑都將傳遞給 ES 模組載入器

  • 程式是透過強制使用 ECMAScript 模組載入器載入入口點的命令列標誌啟動的,例如 --import
  • 檔案具有 .mjs.wasm 副檔名。
  • 檔案沒有 .cjs 副檔名,並且最近的父 package.json 檔案包含一個值為 "module" 的頂層 "type" 欄位。

否則,檔案將使用 CommonJS 模組載入器載入。有關更多詳細資訊,請參閱模組載入器

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

載入時,ES 模組載入器會載入程式入口點,node 命令只接受副檔名為 .js.mjs.cjs 的檔案作為輸入。使用以下標誌可以啟用其他副檔名:

選項#

穩定性:2 - 穩定

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

如果一個接受單個值的選項(例如 --max-http-header-size)被傳遞了多次,那麼將使用最後傳遞的值。命令列中的選項優先於透過 NODE_OPTIONS 環境變數傳遞的選項。

-#

stdin 的別名。類似於在其他命令列實用程式中使用 -,表示指令碼從 stdin 讀取,其餘選項傳遞給該指令碼。

--#

表示 node 選項結束。將餘下的引數傳遞給指令碼。如果在此之前沒有提供指令碼檔名或 eval/print 指令碼,則下一個引數將用作指令碼檔名。

--abort-on-uncaught-exception#

中止而不是退出會導致生成一個核心檔案,用於事後使用偵錯程式(如 lldbgdbmdb)進行分析。

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

--allow-addons#

穩定性:1.1 - 活躍開發

使用許可權模型時,程序預設將無法使用原生外掛。任何這樣做的嘗試都會丟擲 ERR_DLOPEN_DISABLED 錯誤,除非使用者在啟動 Node.js 時明確傳遞 --allow-addons 標誌。

示例

// Attempt to require an native addon
require('nodejs-addon-example'); 
$ node --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 - 活躍開發

使用許可權模型時,程序預設不能派生任何子程序。任何這樣做的嘗試都會丟擲 ERR_ACCESS_DENIED 錯誤,除非使用者在啟動 Node.js 時明確傳遞 --allow-child-process 標誌。

示例

const childProcess = require('node:child_process');
// Attempt to bypass the permission
childProcess.spawn('node', ['-e', 'require("fs").writeFileSync("/new-file", "example")']); 
$ node --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 node:internal/main/run_main_module:17:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'ChildProcess'
} 

child_process.fork() API 會從父程序繼承執行引數。這意味著如果 Node.js 在啟用許可權模型和設定了 --allow-child-process 標誌的情況下啟動,任何使用 child_process.fork() 建立的子程序都將自動接收所有相關的許可權模型標誌。

此行為也適用於 child_process.spawn(),但在這種情況下,標誌是透過 NODE_OPTIONS 環境變數傳播的,而不是直接透過程序引數。

--allow-fs-read#

此標誌使用許可權模型配置了檔案系統的讀取許可權。

--allow-fs-read 標誌的有效引數是:

  • * - 允許所有 FileSystemRead 操作。
  • 可以使用多個 --allow-fs-read 標誌來允許多個路徑。例如 --allow-fs-read=/folder1/ --allow-fs-read=/folder1/

示例可以在檔案系統許可權文件中找到。

初始化模組和自定義的 --require 模組具有隱式的讀取許可權。

$ node --permission -r custom-require.js -r custom-require-2.js index.js 
  • custom-require.jscustom-require-2.jsindex.js 將預設在允許讀取的列表中。
process.has('fs.read', 'index.js'); // true
process.has('fs.read', 'custom-require.js'); // true
process.has('fs.read', 'custom-require-2.js'); // true 

--allow-fs-write#

此標誌使用許可權模型配置了檔案系統的寫入許可權。

--allow-fs-write 標誌的有效引數是:

  • * - 允許所有 FileSystemWrite 操作。
  • 可以使用多個 --allow-fs-write 標誌來允許多個路徑。例如 --allow-fs-write=/folder1/ --allow-fs-write=/folder1/

不再允許使用逗號 (,) 分隔的路徑。當傳遞一個帶有逗號的單一標誌時,將會顯示警告。

示例可以在檔案系統許可權文件中找到。

--allow-inspector#

穩定性:1.0 - 早期開發

使用許可權模型時,程序將無法透過檢查器協議進行連線。

任何這樣做的嘗試都會丟擲 ERR_ACCESS_DENIED 錯誤,除非使用者在啟動 Node.js 時明確傳遞 --allow-inspector 標誌。

示例

const { Session } = require('node:inspector/promises');

const session = new Session();
session.connect(); 
$ node --permission index.js
Error: connect ERR_ACCESS_DENIED Access to this API has been restricted. Use --allow-inspector to manage permissions.
  code: 'ERR_ACCESS_DENIED',
} 

--allow-net#

穩定性:1.1 - 活躍開發

使用許可權模型時,程序預設無法訪問網路。任何這樣做的嘗試都會丟擲 ERR_ACCESS_DENIED 錯誤,除非使用者在啟動 Node.js 時明確傳遞 --allow-net 標誌。

示例

const http = require('node:http');
// Attempt to bypass the permission
const req = http.get('http://example.com', () => {});

req.on('error', (err) => {
  console.log('err', err);
}); 
$ node --permission index.js
Error: connect ERR_ACCESS_DENIED Access to this API has been restricted. Use --allow-net to manage permissions.
  code: 'ERR_ACCESS_DENIED',
} 

--allow-wasi#

穩定性:1.1 - 活躍開發

使用許可權模型時,程序預設無法建立任何 WASI 例項。出於安全原因,呼叫將丟擲 ERR_ACCESS_DENIED 錯誤,除非使用者在主 Node.js 程序中明確傳遞 --allow-wasi 標誌。

示例

const { WASI } = require('node:wasi');
// Attempt to bypass the permission
new WASI({
  version: 'preview1',
  // Attempt to mount the whole filesystem
  preopens: {
    '/': '/',
  },
}); 
$ node --permission --allow-fs-read=* index.js

Error: Access to this API has been restricted
    at node:internal/main/run_main_module:30:49 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'WASI',
} 

--allow-worker#

穩定性:1.1 - 活躍開發

使用許可權模型時,程序預設無法建立任何工作執行緒。出於安全原因,呼叫將丟擲 ERR_ACCESS_DENIED 錯誤,除非使用者在主 Node.js 程序中明確傳遞 --allow-worker 標誌。

示例

const { Worker } = require('node:worker_threads');
// Attempt to bypass the permission
new Worker(__filename); 
$ node --permission --allow-fs-read=* index.js

Error: Access to this API has been restricted
    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-snapshotbuilder 作為主指令碼名稱一起傳遞一樣。
  • withoutCodeCache <boolean> 可選。包含程式碼快取可以減少編譯快照中包含的函式所花費的時間,但代價是快照尺寸更大,並可能破壞快照的可移植性。

使用此標誌時,命令列上提供的其他指令碼檔案將不會被執行,而是被解釋為常規的命令列引數。

-c, --check#

檢查指令碼的語法而不執行。

--completion-bash#

列印可用於 source 的 Node.js 的 bash 補全指令碼。

node --completion-bash > node_bash_completion
source node_bash_completion 

-C condition, --conditions=condition#

提供自定義的條件匯出解析條件。

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

Node.js 的預設條件 "node""default""import""require" 將始終按定義應用。

例如,要以“開發”解析模式執行一個模組:

node -C development app.js 

--cpu-prof#

啟動時啟動 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-name,提供的值將用作檔名的模板。以下佔位符受支援,並將在執行時被替換:

  • ${pid} — 當前程序 ID
$ node --cpu-prof --cpu-prof-name 'CPU.${pid}.cpuprofile' index.js
$ ls *.cpuprofile
CPU.15293.cpuprofile 

--cpu-prof-dir#

指定由 --cpu-prof 生成的 CPU 分析檔案的存放目錄。

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

--cpu-prof-interval#

--cpu-prof 生成的 CPU 分析檔案指定取樣間隔(以微秒為單位)。預設值為 1000 微秒。

--cpu-prof-name#

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

--diagnostic-dir=directory#

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

影響以下項的預設輸出目錄:

--disable-proto=mode#

停用 Object.prototype.__proto__ 屬性。如果 modedelete,該屬性將被完全移除。如果 modethrow,訪問該屬性會丟擲一個程式碼為 ERR_PROTO_ACCESS 的異常。

--disable-sigusr1#

停用透過向程序傳送 SIGUSR1 訊號來啟動除錯會話的功能。

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

穩定性:1.1 - 活躍開發

透過 codetype 停用特定的程序警告。

process.emitWarning() 發出的警告可能包含 codetype。此選項將不發出具有匹配 codetype 的警告。

棄用警告列表

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

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

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

例如,以下指令碼會發出 DEP0025 require('node:sys'),但不會發出任何實驗性警告(例如 <=v21 中的 ExperimentalWarning: vm.measureMemory is an experimental feature),當使用 node --disable-warning=ExperimentalWarning 執行時:

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-wasm-trap-handler#

預設情況下,Node.js 啟用基於陷阱處理程式的 WebAssembly 邊界檢查。因此,V8 無需在從 WebAssembly 編譯的程式碼中插入內聯邊界檢查,這可以顯著加快 WebAssembly 的執行速度,但此最佳化需要分配一個大的虛擬記憶體籠(目前為 10GB)。如果由於系統配置或硬體限制,Node.js 程序無法訪問足夠大的虛擬記憶體地址空間,使用者將無法執行任何涉及在此虛擬記憶體籠中分配記憶體的 WebAssembly,並會看到記憶體不足的錯誤。

$ ulimit -v 5000000
$ node -p "new WebAssembly.Memory({ initial: 10, maximum: 100 });"
[eval]:1
new WebAssembly.Memory({ initial: 10, maximum: 100 });
^

RangeError: WebAssembly.Memory(): could not allocate memory
    at [eval]:1:1
    at runScriptInThisContext (node:internal/vm:209:10)
    at node:internal/process/execution:118:14
    at [eval]-wrapper:6:24
    at runScript (node:internal/process/execution:101:62)
    at evalScript (node:internal/process/execution:136:3)
    at node:internal/main/eval_string:49:3
 

--disable-wasm-trap-handler 停用了此最佳化,以便當使用者 Node.js 程序可用的虛擬記憶體地址空間低於 V8 WebAssembly 記憶體籠所需時,他們至少可以執行 WebAssembly(效能較低)。

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

使像 evalnew Function 這樣從字串生成程式碼的內建語言特性丟擲異常。這不影響 Node.js 的 node:vm 模組。

--dns-result-order=order#

設定 dns.lookup()dnsPromises.lookup()order 的預設值。該值可以是:

  • ipv4first: 將預設 order 設定為 ipv4first
  • ipv6first: 將預設 order 設定為 ipv6first
  • verbatim: 將預設 order 設定為 verbatim

預設值為 verbatimdns.setDefaultResultOrder() 的優先順序高於 --dns-result-order

--enable-fips#

在啟動時啟用符合 FIPS 標準的加密。(要求 Node.js 針對相容 FIPS 的 OpenSSL 進行構建。)

--enable-network-family-autoselection#

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

--enable-source-maps#

為堆疊跟蹤啟用 Source Map 支援。

使用轉譯器(如 TypeScript)時,應用程式丟擲的堆疊跟蹤會引用轉譯後的程式碼,而不是原始原始碼的位置。--enable-source-maps 啟用了 Source Map 的快取,並盡力報告相對於原始原始檔的堆疊跟蹤。

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

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

請注意,啟用 source maps 可能會在訪問 Error.stack 時給應用程式帶來延遲。如果您在應用程式中頻繁訪問 Error.stack,請考慮 --enable-source-maps 的效能影響。

--entry-url#

穩定性:1 - 實驗性

如果存在此標誌,Node.js 將把入口點解釋為 URL,而不是路徑。

遵循 ECMAScript 模組解析規則。

URL 中的任何查詢引數或雜湊都可以透過 import.meta.url 訪問。

node --entry-url 'file:///path/to/file.js?queryparams=work#and-hashes-too'
node --entry-url 'file.ts?query#hash'
node --entry-url 'data:text/javascript,console.log("Hello")' 

--env-file-if-exists=file#

行為與 --env-file 相同,但如果檔案不存在,則不會丟擲錯誤。

--env-file=file#

從相對於當前目錄的檔案中載入環境變數,使它們在 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. 

如果你想從一個可能不存在的檔案中載入環境變數,你可以改用 --env-file-if-exists 標誌。

-e, --eval "script"#

將後續引數作為 JavaScript 執行。REPL 中預定義的模組也可以在 script 中使用。

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

除非提供了 --no-experimental-strip-types 標誌,否則可以執行包含內聯型別的程式碼。

--experimental-addon-modules#

穩定性:1.0 - 早期開發

.node 外掛啟用實驗性的匯入支援。

--experimental-config-file=config#

穩定性:1.0 - 早期開發

如果存在此標誌,Node.js 將在指定路徑查詢配置檔案。Node.js 將讀取配置檔案並應用設定。配置檔案應為 JSON 檔案,結構如下。$schema 中的 vX.Y.Z 必須替換為您正在使用的 Node.js 版本。

{
  "$schema": "https://nodejs.com.tw/dist/vX.Y.Z/docs/node-config-schema.json",
  "nodeOptions": {
    "import": [
      "amaro/strip"
    ],
    "watch-path": "src",
    "watch-preserve-output": true
  },
  "testRunner": {
    "test-isolation": "process"
  }
} 

配置檔案支援特定名稱空間的選項

  • nodeOptions 欄位包含在 NODE_OPTIONS 中允許的 CLI 標誌。

  • testRunner 這樣的名稱空間欄位包含特定於該子系統的配置。

不支援空操作標誌。目前並非所有 V8 標誌都受支援。

可以使用官方 JSON schema 來驗證配置檔案,該 schema 可能因 Node.js 版本而異。配置檔案中的每個鍵都對應一個可以作為命令列引數傳遞的標誌。鍵的值是傳遞給該標誌的值。

例如,上面的配置檔案等同於以下命令列引數

node --import amaro/strip --watch-path=src --watch-preserve-output --test-isolation=process 

配置的優先順序如下:

  1. NODE_OPTIONS 和命令列選項
  2. 配置檔案
  3. Dotenv NODE_OPTIONS

配置檔案中的值不會覆蓋環境變數和命令列選項中的值,但會覆蓋由 --env-file 標誌解析的 NODE_OPTIONS 環境檔案中的值。

在相同或不同名稱空間內,鍵不能重複。

如果配置檔案包含未知鍵或不能在名稱空間中使用的鍵,配置解析器將丟擲錯誤。

Node.js 不會對使用者提供的配置進行清理或驗證,因此**切勿**使用不受信任的配置檔案。

--experimental-default-config-file#

穩定性:1.0 - 早期開發

如果存在 --experimental-default-config-file 標誌,Node.js 將在當前工作目錄中查詢 node.config.json 檔案,並將其載入為配置檔案。

--experimental-eventsource#

在全域性作用域上暴露 EventSource Web API

--experimental-import-meta-resolve#

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

之前該標誌控制整個 import.meta.resolve 功能。

--experimental-inspector-network-resource#

穩定性:1.1 - 活躍開發

為檢查器網路資源啟用實驗性支援。

--experimental-loader=module#

不推薦使用此標誌,並可能在 Node.js 的未來版本中移除。請改用帶 register()--import

指定包含匯出的模組自定義鉤子的 `module`。`module` 可以是任何接受為 `import` 說明符的字串。

如果與許可權模型一起使用,此功能需要 --allow-worker

--experimental-network-inspection#

穩定性:1 - 實驗性

為使用 Chrome DevTools 進行網路檢查啟用實驗性支援。

--experimental-print-required-tla#

如果正在 `require()` 的 ES 模組包含頂層 `await`,此標誌允許 Node.js 評估該模組,嘗試定位頂層 await,並列印其位置以幫助使用者找到它們。

--experimental-quic#

穩定性:1.1 - 活躍開發

為 QUIC 協議啟用實驗性支援。

--experimental-require-module#

穩定性:1.1 - 活躍開發

支援在 `require()` 中載入同步的 ES 模組圖。

參見 使用 `require()` 載入 ECMAScript 模組

--experimental-sea-config#

穩定性:1 - 實驗性

使用此標誌生成一個可以注入到 Node.js 二進位制檔案中以產生單個可執行應用程式的 blob。有關此配置的詳細資訊,請參閱文件。

--experimental-shadow-realm#

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

--experimental-test-coverage#

當與 node:test 模組結合使用時,會生成一份程式碼覆蓋率報告作為測試執行器輸出的一部分。如果沒有執行測試,則不會生成覆蓋率報告。更多詳情請參閱從測試中收集程式碼覆蓋率的文件。

--experimental-test-module-mocks#

穩定性:1.0 - 早期開發

在測試執行器中啟用模組模擬。

如果與許可權模型一起使用,此功能需要 --allow-worker

--experimental-transform-types#

穩定性:1.2 - 候選釋出

啟用將僅 TypeScript 的語法轉換為 JavaScript 程式碼的功能。隱含 --enable-source-maps

--experimental-vm-modules#

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

--experimental-wasi-unstable-preview1#

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

--experimental-worker-inspection#

穩定性:1.1 - 活躍開發

為使用 Chrome DevTools 進行工作執行緒檢查啟用實驗性支援。

--expose-gc#

穩定性:1 - 實驗性。此標誌繼承自 V8,可能會在上游發生變化。

此標誌將暴露 V8 的 gc 擴充套件。

if (globalThis.gc) {
  globalThis.gc();
} 

--force-context-aware#

停用載入非上下文感知的原生外掛。

--force-fips#

在啟動時強制使用符合 FIPS 標準的加密。(不能從指令碼程式碼中停用。)(與 --enable-fips 的要求相同。)

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

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

為防止現有外掛導致程序崩潰,此標誌預設不啟用。將來,此標誌將預設啟用以強制執行正確的行為。

--frozen-intrinsics#

穩定性:1 - 實驗性

啟用實驗性的凍結內建物件,如 ArrayObject

僅支援根上下文。不能保證 globalThis.Array 確實是預設的內建引用。程式碼在此標誌下可能會中斷。

為了允許新增 polyfills,--require--import 都會在凍結內建物件之前執行。

--heap-prof#

在啟動時啟動 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#

指定由 --heap-prof 生成的堆分析檔案的存放目錄。

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

--heap-prof-interval#

--heap-prof 生成的堆分析檔案指定平均取樣間隔(以位元組為單位)。預設值為 512 * 1024 位元組。

--heap-prof-name#

指定由 --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#

列印 node 命令列選項。此選項的輸出比本文件更簡略。

--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""module-typescript""commonjs-typescript"。當使用 --no-experimental-strip-types 標誌時,"-typescript" 值不可用。預設值為無,如果傳遞了 --no-experimental-detect-module,則為 "commonjs"

如果未提供 --input-type,Node.js 將嘗試透過以下步驟檢測語法:

  1. 將輸入作為 CommonJS 執行。
  2. 如果步驟 1 失敗,則將輸入作為 ES 模組執行。
  3. 如果步驟 2 失敗並出現 SyntaxError,則剝離型別。
  4. 如果步驟 3 失敗,錯誤程式碼為 ERR_UNSUPPORTED_TYPESCRIPT_SYNTAXERR_INVALID_TYPESCRIPT_SYNTAX,則丟擲步驟 2 的錯誤,並在訊息中包含 TypeScript 錯誤,否則作為 CommonJS 執行。
  5. 如果步驟 4 失敗,則將輸入作為 ES 模組執行。

為避免多次語法檢測傳遞帶來的延遲,可以使用 --input-type=type 標誌來指定應如何解釋 --eval 輸入。

REPL 不支援此選項。將 --input-type=module--print 一起使用會丟擲錯誤,因為 --print 不支援 ES 模組語法。

--insecure-http-parser#

在 HTTP 解析器上啟用寬鬆標誌。這可能允許與不符合規範的 HTTP 實現進行互操作。

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

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

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

警告:將檢查器繫結到公共 IP:埠 組合是不安全的#

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

如果指定主機,請確保:

  • 主機無法從公共網路訪問。
  • 防火牆禁止了該埠上的不必要連線。

更具體地說,如果埠(預設為 9229)沒有防火牆保護,--inspect=0.0.0.0 是不安全的。

有關更多資訊,請參閱除錯安全影響部分。

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

host:port 上啟用檢查器,並在使用者指令碼開始處中斷。預設 host:port127.0.0.1:9229。如果指定埠 0,將使用一個隨機可用的埠。

有關 Node.js 偵錯程式的進一步說明,請參閱 Node.js 的 V8 檢查器整合

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

設定檢查器啟用時使用的 host:port。在透過傳送 SIGUSR1 訊號啟用檢查器時很有用。除非傳遞了 --disable-sigusr1

預設主機是 127.0.0.1。如果指定埠 0,將使用一個隨機可用的埠。

有關 host 引數用法的安全警告,請參見下文。

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

指定檢查器 web socket url 的暴露方式。

預設情況下,檢查器 websocket url 在 stderr 中可用,並在 http://host:port/json/list/json/list 端點下可用。

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

host:port 上啟用檢查器,並等待偵錯程式附加。預設 host:port127.0.0.1:9229。如果指定埠 0,將使用一個隨機可用的埠。

有關 Node.js 偵錯程式的進一步說明,請參閱 Node.js 的 V8 檢查器整合

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

host:port 上啟用檢查器。預設為 127.0.0.1:9229。如果指定埠 0,將使用一個隨機可用的埠。

V8 檢查器整合允許像 Chrome DevTools 和 IDE 這樣的工具來除錯和分析 Node.js 例項。這些工具透過 TCP 埠附加到 Node.js 例項,並使用 Chrome DevTools 協議進行通訊。有關 Node.js 偵錯程式的進一步說明,請參閱 Node.js 的 V8 檢查器整合

-i, --interactive#

即使 stdin 似乎不是終端,也開啟 REPL。

--jitless#

穩定性:1 - 實驗性。此標誌繼承自 V8,可能會在上游發生變化。

停用可執行記憶體的執行時分配。出於安全原因,在某些平臺上這可能是必需的。它也可以減少其他平臺上的攻擊面,但效能影響可能很嚴重。

--localstorage-file=file#

用於儲存 localStorage 資料的檔案。如果檔案不存在,它將在首次訪問 localStorage 時被建立。同一個檔案可以由多個 Node.js 程序併發共享。如果 Node.js 以 --no-webstorage(或 --no-experimental-webstorage)標誌啟動,則此標誌無效。

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

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

--max-old-space-size-percentage=percentage#

將 V8 老生代記憶體區域的最大記憶體大小設定為可用系統記憶體的百分比。當同時指定此標誌和 --max-old-space-size 時,此標誌優先。

percentage 引數必須是大於 0 且不超過 100 的數字,表示分配給 V8 堆的可用系統記憶體的百分比。

注意: 此標誌利用 --max-old-space-size,由於整數溢位問題,在 32 位平臺上可能不可靠。

# Using 50% of available system memory
node --max-old-space-size-percentage=50 index.js

# Using 75% of available system memory
node --max-old-space-size-percentage=75 index.js 

--napi-modules#

此選項無效。保留它是為了相容性。

--network-family-autoselection-attempt-timeout#

設定網路族自動選擇嘗試的預設超時時間。更多資訊,請參閱 net.getDefaultAutoSelectFamilyAttemptTimeout()

--no-addons#

停用 `node-addons` 匯出條件以及停用載入原生外掛。當指定 `--no-addons` 時,呼叫 `process.dlopen` 或 `require` 一個原生 C++ 外掛將會失敗並丟擲異常。

--no-async-context-frame#

停用由 AsyncContextFrame 支援的 AsyncLocalStorage 的使用,並使用依賴於 async_hooks 的先前實現。保留先前的模型是為了與 Electron 相容,以及在上下文流可能不同的情況下使用。但是,如果發現流程有差異,請報告。

--no-deprecation#

靜默棄用警告。

--no-experimental-detect-module#

停用使用語法檢測來確定模組型別。

--no-experimental-global-navigator#

穩定性:1 - 實驗性

在全域性作用域上停用Navigator API的暴露。

--no-experimental-repl-await#

使用此標誌以在 REPL 中停用頂層 await。

--no-experimental-require-module#

穩定性:1.1 - 活躍開發

停用在 require() 中載入同步 ES 模組圖的支援。

參見 使用 `require()` 載入 ECMAScript 模組

--no-experimental-sqlite#

停用實驗性的 node:sqlite 模組。

--no-experimental-strip-types#

穩定性:1.2 - 候選釋出

停用 TypeScript 檔案的實驗性型別剝離。更多資訊,請參閱TypeScript 型別剝離文件。

--no-experimental-websocket#

在全域性作用域上停用 <WebSocket> 的暴露。

--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#

靜默所有程序警告(包括棄用警告)。

--no-webstorage#

停用 Web Storage 支援。

--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 預設配置部分 openssl_conf。預設配置檔名為 openssl.cnf,但這可以使用環境變數 OPENSSL_CONF 或命令列選項 --openssl-config 進行更改。預設 OpenSSL 配置檔案的位置取決於 OpenSSL 是如何連結到 Node.js 的。共享 OpenSSL 配置可能會有不希望的後果,建議使用特定於 Node.js 的配置部分,即 nodejs_conf,當不使用此選項時,這是預設設定。

--pending-deprecation#

發出待定棄用警告。

待定棄用通常與執行時棄用相同,但有一個顯著的例外:它們預設是*關閉*的,除非設定了 --pending-deprecation 命令列標誌或 NODE_PENDING_DEPRECATION=1 環境變數,否則不會發出。待定棄用用於提供一種選擇性的“預警”機制,開發者可以利用它來檢測已棄用 API 的使用。

--permission#

為當前程序啟用許可權模型。啟用後,以下許可權將受到限制:

--preserve-symlinks#

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

預設情況下,當 Node.js 從一個符號連結到不同磁碟位置的路徑載入模組時,Node.js 會解析該連結,並使用模組在磁碟上的實際“真實路徑”作為識別符號和定位其他依賴模組的根路徑。在大多數情況下,這種預設行為是可以接受的。然而,當使用符號連結的對等依賴(peer dependencies)時,如下例所示,如果 moduleA 試圖 require 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-exclude-env#

當傳遞 --report-exclude-env 時,生成的診斷報告將不包含 environmentVariables 資料。

--report-exclude-network#

從診斷報告中排除 header.networkInterfaces。預設情況下不設定此項,網路介面會被包含在內。

--report-filename=filename#

報告將寫入的檔案的名稱。

如果檔名設定為 '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 可以是檔案路徑,也可以是 node 模組名。

使用 --require 預載入的模組將在使用 --import 預載入的模組之前執行。

模組會被預載入到主執行緒以及任何工作執行緒、派生程序或叢集程序中。

--run#

這將從 package.json 的 "scripts" 物件中執行指定的命令。如果提供了一個缺失的 "command",它將列出可用的指令碼。

--run 將向上遍歷至根目錄,並找到一個 package.json 檔案來執行命令。

--run 會將當前目錄的每個祖先目錄的 ./node_modules/.bin 新增到 PATH 的開頭,以便在存在多個 node_modules 目錄時,從不同的資料夾執行二進位制檔案,前提是 ancestor-folder/node_modules/.bin 是一個目錄。

--run 在包含相關 package.json 的目錄中執行命令。

例如,以下命令將運行當前資料夾中 package.jsontest 指令碼

$ node --run test 

您還可以向命令傳遞引數。在 -- 之後的任何引數都將附加到指令碼中

$ node --run test -- --verbose 
有意為之的限制#

node --run 並非旨在匹配 npm run 或其他包管理器的 run 命令的行為。Node.js 的實現有意地更為有限,以便專注於最常見用例的最高效能。其他 run 實現中被有意排除的一些特性包括

  • 在指定指令碼之外,執行 prepost 指令碼。
  • 定義包管理器特定的環境變數。
環境變數#

使用 --run 執行指令碼時會設定以下環境變數

  • NODE_RUN_SCRIPT_NAME:正在執行的指令碼的名稱。例如,如果使用 --run 執行 test,則此變數的值將為 test
  • NODE_RUN_PACKAGE_JSON_PATH:正在處理的 package.json 的路徑。

--secure-heap-min=n#

當使用 --secure-heap 時,--secure-heap-min 標誌指定從安全堆的最小分配量。最小值為 2。最大值為 --secure-heap2147483647 中的較小者。給定的值必須是 2 的冪。

--secure-heap=n#

初始化一個大小為 n 位元組的 OpenSSL 安全堆。初始化後,安全堆將在金鑰生成和其他操作期間用於 OpenSSL 內的特定型別分配。例如,這對於防止由於指標上溢或下溢導致敏感資訊洩露非常有用。

安全堆是固定大小的,不能在執行時調整大小,因此,如果使用它,選擇一個足夠大的堆以覆蓋所有應用程式用途非常重要。

給定的堆大小必須是 2 的冪。任何小於 2 的值都將停用安全堆。

預設情況下停用安全堆。

安全堆在 Windows 上不可用。

更多詳情請參見 CRYPTO_secure_malloc_init

--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 或 inspector 結合使用。更多詳情請參見從命令列執行測試的文件。

--test-concurrency#

測試執行器 CLI 將併發執行的最大測試檔案數。如果 --test-isolation 設定為 'none',此標誌將被忽略,併發數為 1。否則,併發數預設為 os.availableParallelism() - 1

--test-coverage-branches=threshold#

穩定性:1 - 實驗性

要求一個最低的已覆蓋分支百分比。如果程式碼覆蓋率未達到指定的閾值,程序將以程式碼 1 退出。

--test-coverage-exclude#

穩定性:1 - 實驗性

使用 glob 模式從程式碼覆蓋率中排除特定檔案,該模式可以匹配絕對和相對檔案路徑。

此選項可以指定多次以排除多個 glob 模式。

如果同時提供了 --test-coverage-exclude--test-coverage-include,檔案必須滿足**兩個**標準才能被包含在覆蓋率報告中。

預設情況下,所有匹配的測試檔案都會從覆蓋率報告中排除。指定此選項將覆蓋預設行為。

--test-coverage-functions=threshold#

穩定性:1 - 實驗性

要求一個最低的已覆蓋函式百分比。如果程式碼覆蓋率未達到指定的閾值,程序將以程式碼 1 退出。

--test-coverage-include#

穩定性:1 - 實驗性

使用 glob 模式將特定檔案包含在程式碼覆蓋率中,該模式可以匹配絕對和相對檔案路徑。

此選項可以指定多次以包含多個 glob 模式。

如果同時提供了 --test-coverage-exclude--test-coverage-include,檔案必須滿足**兩個**標準才能被包含在覆蓋率報告中。

--test-coverage-lines=threshold#

穩定性:1 - 實驗性

要求一個最低的已覆蓋行百分比。如果程式碼覆蓋率未達到指定的閾值,程序將以程式碼 1 退出。

--test-force-exit#

配置測試執行器在所有已知測試執行完畢後退出程序,即使事件迴圈原本會保持活動狀態。

--test-global-setup=module#

穩定性:1.0 - 早期開發

指定一個模組,該模組將在所有測試執行之前被評估,可用於為測試設定全域性狀態或固定裝置。

更多詳情請參見全域性設定與拆卸的文件。

--test-isolation=mode#

配置測試執行器中使用的測試隔離型別。當 mode'process' 時,每個測試檔案都在一個單獨的子程序中執行。當 mode'none' 時,所有測試檔案都在與測試執行器相同的程序中執行。預設隔離模式為 'process'。如果不存在 --test 標誌,則此標誌將被忽略。更多資訊請參見測試執行器執行模型部分。

--test-name-pattern#

一個正則表示式,用於配置測試執行器僅執行名稱與所提供模式匹配的測試。更多詳情請參見按名稱篩選測試的文件。

如果同時提供了 --test-name-pattern--test-skip-pattern,測試必須滿足**兩個**要求才能被執行。

--test-only#

配置測試執行器僅執行設定了 only 選項的頂級測試。當測試隔離被停用時,此標誌不是必需的。

--test-reporter#

執行測試時要使用的測試報告器。更多詳情請參見測試報告器的文件。

--test-reporter-destination#

相應測試報告器的目標位置。更多詳情請參見測試報告器的文件。

--test-rerun-failures#

一個檔案路徑,允許測試執行器在多次執行之間持久化測試套件的狀態。測試執行器將使用此檔案來確定哪些測試已經成功或失敗,從而可以重新執行失敗的測試,而無需重新執行整個測試套件。如果檔案不存在,測試執行器將建立它。更多詳情請參見測試重跑的文件。

--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-skip-pattern#

一個正則表示式,用於配置測試執行器跳過名稱與所提供模式匹配的測試。更多詳情請參見按名稱篩選測試的文件。

如果同時提供了 --test-name-pattern--test-skip-pattern,測試必須滿足**兩個**要求才能被執行。

--test-timeout#

測試執行在此毫秒數後將失敗。如果未指定,子測試會從其父測試繼承此值。預設值為 Infinity

--test-update-snapshots#

重新生成測試執行器用於快照測試的快照檔案。

--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.3 安全的 TLSv1.2 的支援。

--trace-deprecation#

為廢棄項列印堆疊跟蹤。

--trace-env#

將當前 Node.js 例項中對環境變數的任何訪問資訊列印到 stderr,包括

  • Node.js 內部進行的環境變數讀取。
  • 形式為 process.env.KEY = "SOME VALUE" 的寫入。
  • 形式為 process.env.KEY 的讀取。
  • 形式為 Object.defineProperty(process.env, 'KEY', {...}) 的定義。
  • 形式為 Object.hasOwn(process.env, 'KEY')process.env.hasOwnProperty('KEY')'KEY' in process.env 的查詢。
  • 形式為 delete process.env.KEY 的刪除。
  • 形式為 ...process.envObject.keys(process.env) 的列舉。

只打印被訪問的環境變數的名稱。不列印值。

要列印訪問的堆疊跟蹤,請使用 --trace-env-js-stack 和/或 --trace-env-native-stack

--trace-env-js-stack#

除了 --trace-env 的功能外,這還會列印訪問的 JavaScript 堆疊跟蹤。

--trace-env-native-stack#

除了 --trace-env 的功能外,這還會列印訪問的原生堆疊跟蹤。

--trace-event-categories#

一個逗號分隔的類別列表,當使用 --trace-events-enabled 啟用跟蹤事件追蹤時,應追蹤這些類別。

--trace-event-file-pattern#

指定跟蹤事件資料檔案路徑的模板字串,它支援 ${rotation}${pid}

--trace-events-enabled#

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

--trace-exit#

每當環境被主動退出時(即呼叫 process.exit()),列印堆疊跟蹤。

--trace-require-module=mode#

列印有關使用 require() 載入 ECMAScript 模組的使用資訊。

modeall 時,列印所有用法。當 modeno-node-modules 時,排除來自 node_modules 資料夾的用法。

--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-env-proxy#

穩定性:1.1 - 活躍開發

啟用後,Node.js 會在啟動時解析 HTTP_PROXYHTTPS_PROXYNO_PROXY 環境變數,並透過指定的代理隧道傳輸請求。

這等同於設定 NODE_USE_ENV_PROXY=1 環境變數。當兩者都設定時,--use-env-proxy 優先。

--use-largepages=mode#

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

以下值對 mode 有效

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

--use-system-ca#

Node.js 使用系統儲存中存在的受信任 CA 證書,以及 --use-bundled-ca 選項和 NODE_EXTRA_CA_CERTS 環境變數。在除 Windows 和 macOS 之外的平臺上,這會從 OpenSSL 信任的目錄和檔案中載入證書,類似於 --use-openssl-ca,不同之處在於它會在首次載入後快取證書。

在 Windows 和 macOS 上,證書信任策略計劃遵循 Chromium 的本地信任證書策略

在 macOS 上,會遵循以下設定

  • 預設和系統鑰匙串
    • 信任
      • 任何“使用此證書時”標誌設定為“始終信任”的證書,或
      • 任何“安全套接字層 (SSL)”標誌設定為“始終信任”的證書。
    • 不信任
      • 任何“使用此證書時”標誌設定為“從不信任”的證書,或
      • 任何“安全套接字層 (SSL)”標誌設定為“從不信任”的證書。

在 Windows 上,會遵循以下設定(與 Chromium 的策略不同,目前不支援不信任和中間 CA)

  • 本地計算機(透過 certlm.msc 訪問)
    • 信任
      • 受信任的根證書頒發機構
      • 受信任人
      • 企業信任 -> 企業 -> 受信任的根證書頒發機構
      • 企業信任 -> 企業 -> 受信任人
      • 企業信任 -> 組策略 -> 受信任的根證書頒發機構
      • 企業信任 -> 組策略 -> 受信任人
  • 當前使用者(透過 certmgr.msc 訪問)
    • 信任
      • 受信任的根證書頒發機構
      • 企業信任 -> 組策略 -> 受信任的根證書頒發機構

在 Windows 和 macOS 上,Node.js 會在使用證書之前檢查使用者設定為證書的 TLS 伺服器身份驗證是否禁止它們。

在其他系統上,Node.js 從 Node.js 連結的 OpenSSL 版本所遵循的預設證書檔案(通常是 /etc/ssl/cert.pem)和預設證書目錄(通常是 /etc/ssl/certs)載入證書。這通常適用於主流 Linux 發行版和其他類 Unix 系統的約定。如果設定了覆蓋 OpenSSL 的環境變數(通常是 SSL_CERT_FILESSL_CERT_DIR,取決於 Node.js 連結的 OpenSSL 的配置),則將使用指定的路徑來載入證書。如果 Node.js 連結的 OpenSSL 版本使用的常規路徑由於某種原因與使用者的系統配置不一致,可以使用這些環境變數作為變通方法。

--v8-options#

列印 V8 命令列選項。

--v8-pool-size=num#

設定 V8 的執行緒池大小,該執行緒池將用於分配後臺作業。

如果設定為 0,則 Node.js 將根據對並行量的估計選擇一個合適的執行緒池大小。

並行量指的是在給定機器上可以同時執行的計算數量。通常,它與 CPU 數量相同,但在虛擬機器或容器等環境中可能會有所不同。

-v, --version#

列印 node 的版本。

--watch#

以監視模式啟動 Node.js。在監視模式下,被監視檔案的更改會導致 Node.js 程序重新啟動。預設情況下,監視模式將監視入口點以及任何被 require 或 import 的模組。使用 --watch-path 來指定要監視的路徑。

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

注意:--watch 標誌需要一個檔案路徑作為引數,並且與 --run 或內聯指令碼輸入不相容,因為 --run 優先並忽略監視模式。如果未提供檔案,Node.js 將以狀態碼 9 退出。

node --watch index.js 

--watch-kill-signal#

穩定性:1.1 - 活躍開發

自定義在監視模式重新啟動時傳送給程序的訊號。

node --watch --watch-kill-signal SIGINT test.js 

--watch-path#

以監視模式啟動 Node.js 並指定要監視的路徑。在監視模式下,被監視路徑的更改會導致 Node.js 程序重新啟動。這將關閉對被 require 或 import 的模組的監視,即使與 --watch 結合使用也是如此。

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

注意:使用 --watch-path 會隱式啟用 --watch,後者需要一個檔案路徑並且與 --run 不相容,因為 --run 優先並忽略監視模式。

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#

自動將所有新分配的 Buffer 例項用零填充。

環境變數#

穩定性:2 - 穩定

FORCE_COLOR=[1, 2, 3]#

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

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

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

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

NODE_COMPILE_CACHE=dir#

穩定性:1.1 - 活躍開發

為 Node.js 例項啟用模組編譯快取。有關詳細資訊,請參閱模組編譯快取的文件。

NODE_COMPILE_CACHE_PORTABLE=1#

當設定為 1 時,只要模組佈局相對於快取目錄保持不變,模組編譯快取就可以在不同的目錄位置之間重用。

NODE_DEBUG=module[,…]#

','-分隔的應列印除錯資訊的核心模組列表。

NODE_DEBUG_NATIVE=module[,…]#

','-分隔的應列印除錯資訊的核心 C++ 模組列表。

NODE_DISABLE_COLORS=1#

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

NODE_DISABLE_COMPILE_CACHE=1#

穩定性:1.1 - 活躍開發

為 Node.js 例項停用模組編譯快取。有關詳細資訊,請參閱模組編譯快取的文件。

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 物件) 資料的路徑。當使用 small-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 選項在以下列表中。如果一個選項支援 --XX 和 --no-XX 兩種變體,它們都受支援,但下面列表中只包含其中一個。

  • --allow-addons
  • --allow-child-process
  • --allow-fs-read
  • --allow-fs-write
  • --allow-inspector
  • --allow-net
  • --allow-wasi
  • --allow-worker
  • --conditions, -C
  • --cpu-prof-dir
  • --cpu-prof-interval
  • --cpu-prof-name
  • --cpu-prof
  • --diagnostic-dir
  • --disable-proto
  • --disable-sigusr1
  • --disable-warning
  • --disable-wasm-trap-handler
  • --dns-result-order
  • --enable-fips
  • --enable-network-family-autoselection
  • --enable-source-maps
  • --entry-url
  • --experimental-abortcontroller
  • --experimental-addon-modules
  • --experimental-detect-module
  • --experimental-eventsource
  • --experimental-import-meta-resolve
  • --experimental-json-modules
  • --experimental-loader
  • --experimental-modules
  • --experimental-print-required-tla
  • --experimental-quic
  • --experimental-require-module
  • --experimental-shadow-realm
  • --experimental-specifier-resolution
  • --experimental-test-isolation
  • --experimental-top-level-await
  • --experimental-transform-types
  • --experimental-vm-modules
  • --experimental-wasi-unstable-preview1
  • --force-context-aware
  • --force-fips
  • --force-node-api-uncaught-exceptions-policy
  • --frozen-intrinsics
  • --heap-prof-dir
  • --heap-prof-interval
  • --heap-prof-name
  • --heap-prof
  • --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-wait
  • --inspect
  • --localstorage-file
  • --max-http-header-size
  • --max-old-space-size-percentage
  • --napi-modules
  • --network-family-autoselection-attempt-timeout
  • --no-addons
  • --no-async-context-frame
  • --no-deprecation
  • --no-experimental-global-navigator
  • --no-experimental-repl-await
  • --no-experimental-sqlite
  • --no-experimental-strip-types
  • --no-experimental-websocket
  • --no-experimental-webstorage
  • --no-extra-info-on-fatal-exception
  • --no-force-async-hooks-checks
  • --no-global-search-paths
  • --no-network-family-autoselection
  • --no-warnings
  • --no-webstorage
  • --node-memory-debug
  • --openssl-config
  • --openssl-legacy-provider
  • --openssl-shared-config
  • --pending-deprecation
  • --permission
  • --preserve-symlinks-main
  • --preserve-symlinks
  • --prof-process
  • --redirect-warnings
  • --report-compact
  • --report-dir, --report-directory
  • --report-exclude-env
  • --report-exclude-network
  • --report-filename
  • --report-on-fatalerror
  • --report-on-signal
  • --report-signal
  • --report-uncaught-exception
  • --require, -r
  • --secure-heap-min
  • --secure-heap
  • --snapshot-blob
  • --test-coverage-branches
  • --test-coverage-exclude
  • --test-coverage-functions
  • --test-coverage-include
  • --test-coverage-lines
  • --test-global-setup
  • --test-isolation
  • --test-name-pattern
  • --test-only
  • --test-reporter-destination
  • --test-reporter
  • --test-rerun-failures
  • --test-shard
  • --test-skip-pattern
  • --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-deprecation
  • --trace-env-js-stack
  • --trace-env-native-stack
  • --trace-env
  • --trace-event-categories
  • --trace-event-file-pattern
  • --trace-events-enabled
  • --trace-exit
  • --trace-require-module
  • --trace-sigint
  • --trace-sync-io
  • --trace-tls
  • --trace-uncaught
  • --trace-warnings
  • --track-heap-objects
  • --unhandled-rejections
  • --use-bundled-ca
  • --use-env-proxy
  • --use-largepages
  • --use-openssl-ca
  • --use-system-ca
  • --v8-pool-size
  • --watch-kill-signal
  • --watch-path
  • --watch-preserve-output
  • --watch
  • --zero-fill-buffers

允許的 V8 選項有

  • --abort-on-uncaught-exception
  • --disallow-code-generation-from-strings
  • --enable-etw-stack-walking
  • --expose-gc
  • --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_USE_ENV_PROXY=1#

穩定性:1.1 - 活躍開發

啟用後,Node.js 會在啟動時解析 HTTP_PROXYHTTPS_PROXYNO_PROXY 環境變數,並透過指定的代理隧道傳輸請求。

也可以使用 --use-env-proxy 命令列標誌來啟用此功能。當兩者都設定時,--use-env-proxy 優先。

NODE_USE_SYSTEM_CA=1#

Node.js 使用系統儲存中存在的受信任 CA 證書,以及 --use-bundled-ca 選項和 NODE_EXTRA_CA_CERTS 環境變數。

也可以使用 --use-system-ca 命令列標誌來啟用此功能。當兩者都設定時,--use-system-ca 優先。

NODE_V8_COVERAGE=dir#

設定後,Node.js 將開始向作為引數提供的目錄輸出 V8 JavaScript 程式碼覆蓋率源對映資料(覆蓋率資訊以 JSON 格式寫入到帶有 coverage 字首的檔案中)。

NODE_V8_COVERAGE 將自動傳播到子程序,這使得對呼叫 child_process.spawn() 系列函式的應用程式進行檢測變得更加容易。NODE_V8_COVERAGE 可以設定為空字串,以防止傳播。

覆蓋率輸出#

覆蓋率以 ScriptCoverage 物件陣列的形式輸出在頂層鍵 result

{
  "result": [
    {
      "scriptId": "67",
      "url": "internal/tty.js",
      "functions": []
    }
  ]
} 
源對映快取#

穩定性:1 - 實驗性

如果找到,源對映資料會附加到 JSON 覆蓋率物件的頂層鍵 source-map-cache 上。

source-map-cache 是一個物件,其鍵表示提取源對映的檔案,其值包括原始源對映 URL(在鍵 url 中)、解析後的 Source Map 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
      ]
    }
  }
} 

NO_COLOR=<any>#

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

OPENSSL_CONF=file#

在啟動時載入一個 OpenSSL 配置檔案。在其他用途中,如果 Node.js 是用 ./configure --openssl-fips 構建的,這可以用來啟用符合 FIPS 標準的加密。

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

SSL_CERT_DIR=dir#

如果啟用了 --use-openssl-ca,或者在除 macOS 和 Windows 之外的平臺上啟用了 --use-system-ca,這將覆蓋並設定 OpenSSL 包含受信任證書的目錄。

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

SSL_CERT_FILE=file#

如果啟用了 --use-openssl-ca,或者在除 macOS 和 Windows 之外的平臺上啟用了 --use-system-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,但在它們不存在的情況下,會使用 libuv 的執行緒池來基於同步系統 API 建立非同步 node API。使用執行緒池的 Node.js API 有

  • 所有 fs API,除了檔案監視器 API 和那些明確是同步的 API
  • 非同步加密 API,如 crypto.pbkdf2()crypto.scrypt()crypto.randomBytes()crypto.randomFill()crypto.generateKeyPair()
  • dns.lookup()
  • 所有 zlib API,除了那些明確是同步的 API

因為 libuv 的執行緒池大小是固定的,這意味著如果出於任何原因,這些 API 中的任何一個耗時過長,其他在 libuv 執行緒池中執行的(看似無關的)API 的效能將會下降。為了緩解這個問題,一個潛在的解決方案是透過將 'UV_THREADPOOL_SIZE' 環境變數設定為大於 4(其當前預設值)的值來增加 libuv 執行緒池的大小。但是,在程序內部使用 process.env.UV_THREADPOOL_SIZE=size 設定這個值不保證有效,因為執行緒池在使用者程式碼執行之前很久,作為執行時初始化的一部分就已經建立了。更多資訊,請參見 libuv 執行緒池文件

有用的 V8 選項#

V8 有自己的一套 CLI 選項。任何提供給 node 的 V8 CLI 選項都會被傳遞給 V8 處理。V8 的選項*沒有穩定性保證*。V8 團隊自己並不認為它們是其正式 API 的一部分,並保留隨時更改它們的權利。同樣,它們也不受 Node.js 穩定性保證的覆蓋。許多 V8 選項只對 V8 開發人員感興趣。儘管如此,有一小部分 V8 選項廣泛適用於 Node.js,它們在這裡被記錄下來

--abort-on-uncaught-exception#

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

--enable-etw-stack-walking#

--expose-gc#

--harmony-shadow-realm#

--interpreted-frames-native-stack#

--jitless#

--max-old-space-size=SIZE (單位 MiB)#

設定 V8 老生代記憶體區域的最大記憶體大小。當記憶體消耗接近限制時,V8 會花費更多時間進行垃圾回收以釋放未使用的記憶體。

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

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

--max-semi-space-size=SIZE (單位 MiB)#

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

由於 V8 堆的新生代大小是半空間大小的三倍(參見 V8 中的 YoungGenerationSizeFromSemiSpaceSize),半空間增加 1 MiB 會應用到三個獨立的半空間中的每一個,並導致堆大小增加 3 MiB。吞吐量的提升取決於您的工作負載(參見 #42511)。

預設值取決於記憶體限制。例如,在記憶體限制為 512 MiB 的 64 位系統上,半空間的最大大小預設為 1 MiB。對於記憶體限制不超過 2GiB 的情況,在 64 位系統上半空間的最大預設大小將小於 16 MiB。

要為您的應用程式獲取最佳配置,您應該在為應用程式執行基準測試時嘗試不同的 max-semi-space-size 值。

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

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

--perf-basic-prof#

--perf-basic-prof-only-functions#

--perf-prof#

--perf-prof-unwinding-info#

--prof#

--security-revert#

--stack-trace-limit=limit#

在錯誤的堆疊跟蹤中收集的最大堆疊幀數。將其設定為 0 會停用堆疊跟蹤收集。預設值為 10。

node --stack-trace-limit=12 -p -e "Error.stackTraceLimit" # prints 12