Node.js v21.7.2 文件
- Node.js v21.7.2
-
► 目錄
- 命令列 API
- 概要
- 程式進入點
- 選項
-
--
--abort-on-uncaught-exception
--allow-addons
--allow-child-process
--allow-fs-read
--allow-fs-write
--allow-worker
--build-snapshot
--build-snapshot-config
-c
,--check
--completion-bash
-C condition
,--conditions=condition
--cpu-prof
--cpu-prof-dir
--cpu-prof-interval
--cpu-prof-name
--diagnostic-dir=directory
--disable-warning=code-or-type
--disable-proto=mode
--disallow-code-generation-from-strings
--dns-result-order=order
--enable-fips
--enable-network-family-autoselection
--enable-source-maps
--env-file=config
-e
,--eval "script"
--experimental-default-type=type
--experimental-detect-module
--experimental-import-meta-resolve
--experimental-loader=module
--experimental-network-imports
--experimental-permission
--experimental-policy
--experimental-sea-config
--experimental-shadow-realm
--experimental-test-coverage
--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
--heap-prof
--heap-prof-dir
--heap-prof-interval
--heap-prof-name
--heapsnapshot-near-heap-limit=max_count
--heapsnapshot-signal=signal
-h
,--help
--icu-data-dir=file
--import=module
--input-type=type
--insecure-http-parser
--inspect[=[host:]port]
--inspect-brk[=[host:]port]
--inspect-port=[host:]port
--inspect-publish-uid=stderr,http
-i
,--interactive
--jitless
--max-http-header-size=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=sri
--preserve-symlinks
--preserve-symlinks-main
-p
,--print "指令碼"
--prof
--prof-process
--redirect-warnings=檔案
--report-compact
--report-dir=目錄
,report-directory=目錄
--report-filename=檔名
--report-on-fatalerror
--report-on-signal
--report-signal=訊號
--report-uncaught-exception
-r
,--require 模組
--secure-heap=n
--secure-heap-min=n
--snapshot-blob=路徑
--test
--test-concurrency
--test-name-pattern
--test-only
--test-reporter
--test-reporter-destination
--test-shard
--test-timeout
--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-openssl-ca
--use-largepages=模式
--v8-options
--v8-pool-size=數字
-v
,--version
--watch
--watch-path
--watch-preserve-output
--zero-fill-buffers
- 環境變數
FORCE_COLOR=[1, 2, 3]
NO_COLOR=<任意>
NODE_DEBUG=模組[,…]
NODE_DEBUG_NATIVE=模組[,…]
NODE_DISABLE_COLORS=1
NODE_EXTRA_CA_CERTS=檔案
NODE_ICU_DATA=檔案
NODE_NO_WARNINGS=1
NODE_OPTIONS=選項...
NODE_PATH=路徑[:…]
NODE_PENDING_DEPRECATION=1
NODE_PENDING_PIPE_INSTANCES=執行個體
NODE_PRESERVE_SYMLINKS=1
NODE_REDIRECT_WARNINGS=檔案
NODE_REPL_EXTERNAL_MODULE=檔案
NODE_REPL_HISTORY=檔案
NODE_SKIP_PLATFORM_CHECK=值
NODE_TEST_CONTEXT=值
NODE_TLS_REJECT_UNAUTHORIZED=值
NODE_V8_COVERAGE=目錄
OPENSSL_CONF=檔案
SSL_CERT_DIR=目錄
SSL_CERT_FILE=檔案
TZ
UV_THREADPOOL_SIZE=大小
UV_USE_IO_URING=值
- 有用的 V8 選項
- 命令列 API
-
► 索引
- 斷言測試
- 非同步背景追蹤
- 非同步掛鉤
- 緩衝區
- C++ 附加元件
- 使用 Node-API 的 C/C++ 附加元件
- C++ 嵌入式 API
- 子程序
- 叢集
- 命令列選項
- 主控台
- Corepack
- 加密
- 偵錯器
- 已棄用 API
- 診斷頻道
- DNS
- 網域
- 錯誤
- 事件
- 檔案系統
- 全域變數
- HTTP
- HTTP/2
- HTTPS
- 檢查器
- 國際化
- 模組:CommonJS 模組
- 模組:ECMAScript 模組
- 模組:
node:module
API - 模組:套件
- 網路
- 作業系統
- 路徑
- 效能掛鉤
- 權限
- 程序
- Punycode
- 查詢字串
- Readline
- REPL
- 報告
- 單一可執行應用程式
- 串流
- 字串解碼器
- 測試執行器
- 計時器
- TLS/SSL
- 追蹤事件
- TTY
- UDP/資料包
- URL
- 工具程式
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- 工作執行緒
- Zlib
- ► 其他版本
- ► 選項
命令列 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
#
中斷而非結束會產生核心檔案,以便使用除錯器 (例如 lldb
、gdb
和 mdb
) 進行事後分析。
如果傳遞此標記,仍可透過 process.setUncaughtExceptionCaptureCallback()
(以及使用它的 node:domain
模組) 將行為設定為不中斷。
--allow-addons
#
使用 權限模型 時,該程序預設無法使用原生外掛程式。除非使用者在啟動 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
#
使用 權限模型 時,預設情況下,程序將無法產生任何子程序。除非使用者在啟動 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
#
此旗標使用 權限模型 設定檔案系統讀取權限。
--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
#
此旗標使用 權限模型 設定檔案系統寫入權限。
--allow-fs-write
旗標的有效參數為
*
- 允許所有FileSystemWrite
作業。- 可以使用多個
--allow-fs-read
旗標允許多個路徑。範例--allow-fs-read=/folder1/ --allow-fs-read=/folder1/
不再允許以逗號 (,
) 分隔路徑。傳遞單一旗標和逗號時,會顯示警告。
可以在 檔案系統權限 文件中找到範例。
CLI 旗標不支援相對路徑。
--allow-worker
#
在使用 權限模型 時,該程序在預設情況下無法建立任何工作執行緒。出於安全原因,除非使用者在 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
#
在程序結束時產生快照 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 文件。
目前,對執行時間快照的支持是實驗性的,原因在於
- 使用者空間模組尚未在快照中獲得支援,因此只能快照化一個單一檔案。不過,使用者可以在建立快照之前,使用他們選擇的打包器將其應用程式打包成單一指令碼。
- 內建模組中僅有部分可在快照中運作,儘管 Node.js 核心測試套件檢查出幾個相當複雜的應用程式可以被快照化。更多模組支援正在新增中。如果在建立快照時發生任何崩潰或錯誤行為,請在 Node.js 問題追蹤器 中提交報告,並在 使用者端快照追蹤問題 中連結至該報告。
--build-snapshot-config
#
指定 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 條件
、--條件=條件
#
啟用對自訂 條件輸出解析條件的實驗性支援。
允許任意數量的自訂字串條件名稱。
"node"
、"default"
、"import"
和 "require"
等 Node.js 預設條件將始終套用,如定義所示。
例如,要執行具有「開發」解析度的模組
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-dir
#
指定 --cpu-prof
產生的 CPU 分析將置於其中的目錄。
預設值由 --diagnostic-dir
命令列選項控制。
--cpu-prof-interval
#
指定 --cpu-prof
產生的 CPU 分析的微秒取樣間隔。預設為 1000 微秒。
--cpu-prof-name
#
指定由 --cpu-prof
生成的 CPU 剖析檔案名稱。
--diagnostic-dir=directory
#
設定寫入所有診斷輸出檔案的目錄。預設為目前工作目錄。
影響下列預設輸出目錄
--disable-warning=code-or-type
#
依據 code
或 type
停用特定程序警告。
從 process.emitWarning()
發出的警告可能包含 code
和 type
。此選項不會發出具有相符 code
或 type
的警告。
Node.js 核心警告類型為:DeprecationWarning
和 ExperimentalWarning
例如,當使用 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__
屬性。如果 mode
為 delete
,則會完全移除該屬性。如果 mode
為 throw
,則存取該屬性會擲回具有 ERR_PROTO_ACCESS
程式碼的例外狀況。
--disallow-code-generation-from-strings
#
讓內建語言功能(例如 eval
和 new Function
)從字串產生程式碼時,改為擲回例外狀況。這不會影響 Node.js node:vm
模組。
--dns-result-order=order
#
在 dns.lookup()
和 dnsPromises.lookup()
中設定 verbatim
的預設值。值可以是
ipv4first
:設定預設verbatim
為false
。verbatim
:設定預設verbatim
為true
。
預設值為 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
#
從相對於目前目錄的檔案載入環境變數,並在 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
#
定義下列要使用的模組系統,module
或 commonjs
-
如果未指定
--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
#
Node.js 會檢查不明確輸入的原始碼,以判斷是否包含 ES 模組語法;如果偵測到此類語法,輸入將會被視為 ES 模組。
不明確輸入定義為
- 具有
.js
副檔名或沒有副檔名的檔案;且沒有控制的package.json
檔案,或缺少type
欄位的package.json
檔案;且未指定--experimental-default-type
。 - 未指定
--input-type
或--experimental-default-type
時的字串輸入 (--eval
或 STDIN)。
ES 模組語法定義為在評估為 CommonJS 時會引發的語法。這包括 import
和 export
陳述式,以及 import.meta
參照。不包括 import()
運算式,因為它們在 CommonJS 中有效。
--experimental-import-meta-resolve
#
啟用實驗性質的 import.meta.resolve()
父 URL 支援,允許傳遞第二個 parentURL
引數進行脈絡解析。
先前封鎖整個 import.meta.resolve
功能。
--experimental-loader=module
#
此標記不建議使用,並可能在未來版本的 Node.js 中移除。請改用
--import
搭配register()
。
指定包含已匯出的 模組自訂化掛鉤 的 module
。module
可以是任何字串,可作為 import
規格 接受。
--experimental-network-imports
#
啟用 import
規格中 https:
協定的實驗性支援。
--experimental-permission
#
為目前程序啟用權限模型。啟用後,以下權限將受到限制
- 檔案系統 - 可透過
--allow-fs-read
、--allow-fs-write
標記管理 - 子程序 - 可透過
--allow-child-process
標記管理 - 工作執行緒 - 可透過
--allow-worker
標記管理
--experimental-policy
#
使用指定的檔案作為安全性政策。
--experimental-sea-config
#
使用此標記可產生一個 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
#
啟用實驗性質的凍結內建函數,例如 Array
和 Object
。
僅支援根內容。無法保證 globalThis.Array
確實是預設的內建函數參考。程式碼可能會在這個旗標下中斷。
為了允許新增多載,--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
#
當 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
#
在啟動時預載指定的模組。如果多次提供旗標,每個模組將按出現順序依序執行,從 NODE_OPTIONS
中提供的模組開始。
遵循 ECMAScript 模組 解析規則。使用 --require
來載入 CommonJS 模組。使用 --require
預載的模組將在使用 --import
預載的模組之前執行。
--input-type=type
#
這會將 Node.js 設定為將 --eval
或 STDIN
輸入解釋為 CommonJS 或 ES 模組。有效值為 "commonjs"
或 "module"
。預設值為 "commonjs"
,除非使用 --experimental-default-type=module
。
REPL 不支援此選項。與 --print
搭配使用 --input-type=module
會擲回錯誤,因為 --print
不支援 ES 模組語法。
--insecure-http-parser
#
在 HTTP 解析器上啟用寬容性旗標。這可能會允許與不符合規範的 HTTP 實作互通。
啟用後,解析器將接受下列內容
- 無效的 HTTP 標頭值。
- 無效的 HTTP 版本。
- 允許訊息同時包含
Transfer-Encoding
和Content-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:port
為 127.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
#
停用 執行時間配置可執行記憶體。出於安全原因,某些平台可能需要這麼做。它也可以減少其他平台的攻擊面,但效能影響可能會很嚴重。
--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
#
停用在全域範圍內公開 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
#
指示 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-heap
或 2147483647
中較小的值。所提供的數值必須為 2 的次方。
--snapshot-blob=path
#
與 --build-snapshot
搭配使用時,--snapshot-blob
會指定所產生的快照 blob 寫入的路徑。如果未指定,產生的 blob 會寫入至目前工作目錄中的 snapshot.blob
。
在不使用 --build-snapshot
的情況下,--snapshot-blob
會指定用於還原應用程式狀態的 blob 路徑。
在載入快照時,Node.js 會檢查下列事項:
- 執行中 Node.js 二進位檔的版本、架構和平台與產生快照的二進位檔完全相同。
- 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
#
將對 Atomics.wait()
的呼叫印出簡短摘要至 stderr。輸出可能如下所示
(node:15701) [Thread 0] Atomics.wait(<address> + 0, 1, inf) started
(node:15701) [Thread 0] Atomics.wait(<address> + 0, 1, inf) did not wait because the values mismatched
(node:15701) [Thread 0] Atomics.wait(<address> + 0, 0, 10) started
(node:15701) [Thread 0] Atomics.wait(<address> + 0, 0, 10) timed out
(node:15701) [Thread 0] Atomics.wait(<address> + 4, 0, inf) started
(node:15701) [Thread 1] Atomics.wait(<address> + 4, -1, inf) started
(node:15701) [Thread 0] Atomics.wait(<address> + 4, 0, inf) was woken up by another thread
(node:15701) [Thread 1] Atomics.wait(<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_DIR
和 SSL_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
#
在監控模式下啟動 Node.js。在監控模式下,受監控檔案的變更會導致 Node.js 程序重新啟動。預設情況下,監控模式將監控進入點和任何必需或匯入的模組。使用 --watch-path
指定要監控的路徑。
此標記無法與 --check
、--eval
、--interactive
或 REPL 結合使用。
node --watch index.js
--watch-path
#
在監控模式下啟動 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
#
自動將所有新配置的 Buffer
和 SlowBuffer
執行個體填滿零。
環境變數#
FORCE_COLOR=[1, 2, 3]
#
FORCE_COLOR
環境變數用於啟用 ANSI 彩色輸出。值可能是
1
、true
或空字串''
表示支援 16 色,2
表示支援 256 色,或3
表示支援 1600 萬色。
當使用 FORCE_COLOR
並將其設定為受支援的值時,NO_COLOR
和 NODE_DISABLE_COLORS
環境變數都會被忽略。
任何其他值都會導致彩色輸出被停用。
NO_COLOR=<any>
#
NO_COLOR
是 NODE_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": []
}
]
}
原始碼對應表快取#
如果找到,原始碼對應表資料會附加到 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