On this page

命令行 API

History

Node.js 附带各种命令行选项。这些选项提供了内置的调试功能、多种执行脚本的方式以及其他有用的运行时选项。

若要在终端中将此文档查看为手册页,请运行 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 的更多信息,请参阅 debugger 文档。

程序入口点是一个类似说明符的字符串。如果该字符串不是绝对路径,则它会从当前工作目录解析为相对路径。然后,该入口点字符串的解析方式就好像它是从当前工作目录通过 require() 请求的一样。如果找不到相应的文件,则会抛出错误。

默认情况下,解析后的路径的加载方式也好像它是通过 require() 请求的,除非适用以下条件之一——那么它的加载方式就好像它是通过 import() 请求的:

  • 程序的启动使用了强制通过 ECMAScript 模块加载器加载入口点的命令行标志,例如 --import。
  • 文件的扩展名为 .mjs、.mts 或 .wasm。
  • 文件没有 .cjs 扩展名,并且最近的父级 package.json 文件包含值为 "module" 的顶层 "type" 字段。

有关更多详细信息,请参阅 module resolution and loading。

稳定性:2 - 稳定

所有选项(包括 V8 选项)都允许单词之间使用连字符(-)或下划线(_)分隔。例如,--pending-deprecation 等同于 --pending_deprecation。

如果传递了多次接受单个值的选项(例如 --max-http-header-size),则使用最后传递的值。命令行选项优先于通过 NODE_OPTIONS 环境变量传递的选项。

-

History

stdin 的别名。类似于其他命令行实用程序中对 - 的使用,这意味着脚本从 stdin 读取,其余选项传递给该脚本。

--

History

表示 node 选项的结束。将其余参数传递给脚本。如果在此之前没有提供脚本文件名或 eval/print 脚本,则下一个参数将用作脚本文件名。

--abort-on-uncaught-exception

History

中止而不是退出会导致生成核心文件,以便使用调试器(如 lldb、gdb 和 mdb)进行事后分析。

如果传递了此标志,仍然可以通过 process.setUncaughtExceptionCaptureCallback()(以及通过使用它的 node:domain 模块)将行为设置为不中止。

--allow-addons

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程默认将无法使用原生插件。 除非用户在启动 Node.js 时显式传递 --allow-addons 标志,否则尝试这样做将抛出 ERR_DLOPEN_DISABLED。

示例:

// 尝试 require 一个原生插件
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: 无法加载原生插件,因为加载插件已被禁用。
    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:16)
    at Object.<anonymous> (/home/index.js:1:15)
    at Module._compile (node:internal/modules/cjs/loader:1233:14)
    at Module._extensions..node (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'
}

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程默认将无法生成任何子进程。 除非用户在启动 Node.js 时显式传递 --allow-child-process 标志,否则尝试这样做将抛出 ERR_ACCESS_DENIED。

示例:

const childProcess = require('node:child_process');
// 尝试绕过权限
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: 此 API 的访问已被限制
    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-env

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程启动时不会包含未获准访问的环境变量。在启动时,所有与 --allow-env 不匹配的变量都会从进程环境中移除。被移除的变量不会出现在 process.env、诊断报告、调用 getenv() 的原生代码,以及子进程和工作线程的环境中。

有效值为:

  • * - 授予对所有环境变量的访问权限。
  • 一个变量名,例如 --allow-env=DATABASE_URL。
  • 一个后缀为 * 的变量名前缀,例如 --allow-env=APP_*。

可以通过重复此标志或用逗号分隔来传递多个值:--allow-env=PORT,APP_*。在 Windows 上,变量名不区分大小写。

示例:

console.log(process.env.DATABASE_URL);
console.log(process.env.AWS_SECRET_ACCESS_KEY);
$ node --permission --allow-fs-read=* --allow-env=DATABASE_URL index.js
postgres://localhost/app
undefined
(node:1234) Warning: The permission model removed the environment variable "AWS_SECRET_ACCESS_KEY" at startup. Use --allow-env to manage permissions.

Node.js 及其捆绑依赖项读取的变量(例如 NODE_OPTIONS、PATH、HOME、TZ 和 SSL_CERT_FILE)始终会保留,--env-file 文件中定义的变量也会保留。默认情况下不会保留 NODE_ENV,因此读取该变量的应用程序和库需要使用 --allow-env=NODE_ENV。详情请参阅[环境变量权限][]。

--allow-ffi

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程默认将无法使用 FFI API。除非用户在启动 Node.js 时显式传递 --allow-ffi 标志,否则尝试使用 FFI API 将抛出 ERR_ACCESS_DENIED 异常。只有在启用了 FFI 支持的构建中,才提供 node:ffi 模块。

示例:

const { DynamicLibrary, suffix } = require('node:ffi');
const lib = new DynamicLibrary(`./mylib.${suffix}`);
$ node --permission index.js
Error: Access to this API has been restricted. Use --allow-ffi to manage permissions.
    at node:internal/main/run_main_module:17:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'FFI'
}

此标志使用 [权限模型][] 配置文件系统读取权限。

--allow-fs-read 标志的有效参数为:

  • * - 允许所有 FileSystemRead 操作。
  • 可以使用多个 --allow-fs-read 标志允许多个路径。 示例 --allow-fs-read=/folder1/ --allow-fs-read=/folder2/

示例可以在 [文件系统权限][] 文档中找到。

初始化模块和自定义 --require 模块具有隐式读取权限。

  • custom-require.js、custom-require-2.js 和 index.js 默认将在允许的读取列表中。
process.permission.has('fs.read', 'index.js'); // 真
process.permission.has('fs.read', 'custom-require.js'); // 真
process.permission.has('fs.read', 'custom-require-2.js'); // 真

--allow-fs-vfs

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,默认情况下无法挂载[虚拟文件系统][]:除非用户在启动 Node.js 时显式传递 --allow-fs-vfs 标志,否则 vfs.mount() 会抛出 ERR_INVALID_STATE。

已挂载的 VFS 提供的路径不由文件系统权限描述,因此挂载 VFS 由其自身的标志控制,而不是由 --allow-fs-read 或 --allow-fs-write 控制。

此标志使用 [权限模型][] 配置文件系统写入权限。

--allow-fs-write 标志的有效参数为:

  • * - 允许所有 FileSystemWrite 操作。
  • 可以使用多个 --allow-fs-write 标志来允许多个路径。 示例 --allow-fs-write=/folder1/ --allow-fs-write=/folder2/

不再允许使用逗号 (,) 分隔的路径。 当传递带有逗号的单个标志时,将显示警告。

示例可以在 [文件系统权限][] 文档中找到。

检查器连接权限

History

稳定性:1.0 - 早期开发

当使用 [权限模型][] 时,进程将无法通过检查器协议连接。

除非用户在启动 Node.js 时显式传递 --allow-inspector 标志,否则尝试这样做将抛出 ERR_ACCESS_DENIED。

示例:

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

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程默认将无法访问网络。 除非用户在启动 Node.js 时显式传递 --allow-net 标志,否则尝试这样做将抛出 ERR_ACCESS_DENIED。

示例:

const http = require('node:http');
// 尝试绕过权限
const req = http.get('http://example.com', () => {});

req.on('error', (err) => {
  console.log('err', err);
});
$ node --permission index.js
错误:connect ERR_ACCESS_DENIED 对此 API 的访问已被限制。使用 --allow-net 来管理权限。
  code: 'ERR_ACCESS_DENIED',
}

--allow-openssl-store

History

稳定性:1.1 - 开发中

使用[权限模型][]时,进程默认无法使用 OpenSSL STORE 加载器,例如从传递给 crypto.createPrivateKey() 的 URL 中加载私钥。除非用户明确传递 --allow-openssl-store 标志,否则尝试这样做将抛出 ERR_ACCESS_DENIED。此权限可在运行时通过 permission.drop() 移除。

此标志向已配置的 OpenSSL STORE 加载器授予广泛权限。加载器可能会访问文件、设备、令牌或网络。加载器执行的访问不受 fs.read、fs.write 或 net 权限范围的限制。

不过,加载器及其加载的模块受 --allow-env 约束。除非使用 --allow-env 显式授予权限,否则它们依赖的环境变量(例如 SoftHSM 使用的 SOFTHSM2_CONF)会在启动时被移除。详情请参阅[环境变量权限][]。

--allow-wasi

History

稳定性:1.1 - 积极开发中

当使用 Permission Model 时,进程默认将无法创建任何 WASI 实例。 出于安全原因,除非用户在主 Node.js 进程中显式传递 --allow-wasi 标志,否则调用将抛出 ERR_ACCESS_DENIED。

示例:

const { WASI } = require('node:wasi');
// 尝试绕过权限
new WASI({
  version: 'preview1',
  // 尝试挂载整个文件系统
  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

History

稳定性:1.1 - 积极开发中

当使用 [权限模型][] 时,进程默认将无法创建任何工作线程。
出于安全原因,除非用户在主 Node.js 进程中显式传递 --allow-worker 标志,否则调用将抛出 ERR_ACCESS_DENIED。

示例:

const { Worker } = require('node:worker_threads');
// 尝试绕过权限
new Worker(__filename);
$ node --permission --allow-fs-read=* index.js

Error: 对此 API 的访问已受限制
    at node:internal/main/run_main_module:17:47 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'WorkerThreads'
}

--bench

History

稳定性:1 - 实验性

启动 Node.js 命令行基准测试运行器。必须至少指定一个文件或 glob 模式:

node --experimental-bench --bench benchmark.mjs
node --experimental-bench --bench 'benchmarks/**/*.js'

使用此标志或任何其他 --bench-* 选项都需要 --experimental-bench 标志。

请将 glob 模式括起来,防止 shell 对其展开。匹配的文件会排序后依次执行。默认情况下,每个文件都在单独的子进程中运行。基准测试文件使用 node:bench 声明基准测试;不得自行调用 run()。更多详情请参阅[基准测试运行器][]文档。

此标志不能与 --test、--watch、--watch-path、--check、--eval 或 --interactive 一起使用。

--bench-isolation=mode

History

稳定性:1 - 实验性

配置基准测试文件的隔离方式。当 mode 为 'process' 时,每个匹配的文件都会在单独的子进程中运行。这是默认模式。文件仍会依次运行,因此其测量的工作不会重叠。

当 mode 为 'none' 时,所有匹配的文件和基准测试都会在基准测试运行器进程中依次运行。这会减少启动开销,但会使模块、堆和进程状态在文件之间延续。在此模式下,用户向标准输出或标准错误的写入也会与基准测试报告器共用目标位置。

支持的模式为 'process' 和 'none'。

--bench-name-pattern=pattern

History

稳定性:1 - 实验性

仅运行完整层级名称与 JavaScript 正则表达式 pattern 匹配的基准测试。不匹配的基准测试会报告为已跳过。

--bench-reporter-destination=destination

History

稳定性:1 - 实验性

指定相应基准测试报告器的目标位置。值可以是 stdout、stderr 或文件路径。如果未指定目标位置,则单个报告器默认使用 stdout。

--bench-reporter=reporter

History

稳定性:1 - 实验性

指定基准测试报告器。内置报告器为 spec 和 json。json 报告器会输出以换行符分隔的 JSON。可以使用从当前工作目录解析的模块说明符指定自定义报告器。

此选项可以重复指定。指定多个报告器时,每个报告器都必须有对应的 --bench-reporter-destination。默认报告器为 spec。

--bench-samples=count

History

稳定性:1 - 实验性

覆盖每个选定基准测试的回调调用次数上限。基准测试可以通过调用 context.done() 提前结束。count 必须是介于 1 和 4294967295 之间的整数。

--bench-warmup=count

History

稳定性:1 - 实验性

覆盖每个选定基准测试未报告的预热回调调用次数。count 必须是介于 0 和 4294967295 之间的整数。

--build-sea=config

History

稳定性:1.1 - 积极开发中

根据 JSON 配置文件生成单可执行应用程序。参数必须是配置文件的路径。如果路径不是绝对路径,则相对于当前工作目录解析。

有关配置字段、跨平台说明和资源 API,请参阅单可执行应用程序文档。

在进程退出时生成快照 blob 并将其写入磁盘,以后可以使用 --snapshot-blob 加载。

构建快照时,如果未指定 --snapshot-blob,则生成的 blob 默认将写入当前工作目录中的 snapshot.blob。否则,它将写入 --snapshot-blob 指定的路径。

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

# 运行 snapshot.js 来初始化应用程序并将其状态快照到 snapshot.blob 中。
$ node --snapshot-blob snapshot.blob --build-snapshot snapshot.js

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

# 加载生成的快照并从 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 核心测试套件检查了几个相当复杂的应用程序是否可以快照化。被 [TRANSDOC_LOCK_14][] 的内置模块列表被视为受支持。 当快照构建器遇到无法序列化的内置模块时,它可能会导致快照构建过程崩溃。在这种情况下,典型的解决方法是延迟加载该模块直到运行时,使用 v8.startupSnapshot.setDeserializeMainFunction() 或 v8.startupSnapshot.addDeserializeCallback()。如果需要在快照构建过程中为额外的模块进行序列化,请在 [Node.js 问题跟踪器][] 中提交请求,并将其链接到 [用户态快照的跟踪问题][]。

指定用于配置快照创建行为的 JSON 配置文件的路径。

目前支持以下选项:

Attributes
builder:string
必需。提供在构建快照之前执行的脚本名称,其效果等同于将 builder 作为主脚本名称传递给 --build-snapshot 。
withoutCodeCache:boolean
可选。包含代码缓存可以减少编译快照中所含函数的执行时间,但会增大快照大小,并可能破坏快照的可移植性。

使用此标志时,命令行中提供的其他脚本文件不会被执行,而是会被解释为常规命令行参数。

-c、--check

History

检查脚本语法而不执行。

--completion-bash

History

打印一个可供 source 的 Node.js bash 补全脚本。

node --completion-bash > node_bash_completion
source node_bash_completion

提供自定义 [条件导出][] 解析条件。

允许任意数量的自定义字符串条件名称。

默认的 Node.js 条件 "node"、"default"、"import" 和 "require" 将始终按定义应用。

例如,要以 "development" 条件解析运行模块:

在启动时启动 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 生成的 CPU 性能分析文件的目录。

默认值由 --diagnostic-dir 命令行选项控制。

指定由 --cpu-prof 生成的 CPU 配置文件的采样间隔(微秒)。默认值为 1000 微秒。

指定由 --cpu-prof 生成的 CPU 配置文件的文件名。

设置所有诊断输出文件写入的目录。默认为当前工作目录。

影响以下内容的默认输出目录:

--disable-proto=mode

History

禁用 Object.prototype.__proto__ 属性。如果 mode 为 delete,则该属性被完全移除。如果 mode 为 throw,则访问该属性会抛出代码为 ERR_PROTO_ACCESS 的异常。

--disable-sigusr1

History

禁用通过向进程发送 SIGUSR1 信号来启动调试会话的能力。

稳定性:2 - 稳定

按 code 或 type 禁用特定的进程警告。

从 process.emitWarning() 发出的警告可能包含 code 和 type。此选项将不发出具有匹配 code 或 type 的警告。

弃用警告 列表。

Node.js 核心警告类型为:DeprecationWarning 和 ExperimentalWarning

例如,以下脚本在使用 node --disable-warning=DEP0025 执行时将不发出 DEP0025 require('node:sys'):

例如,以下脚本在使用 node --disable-warning=ExperimentalWarning 执行时将发出 DEP0025 require('node:sys'),但不发出任何实验性警告(例如 <=v21 中的 [实验性警告:vm.measureMemory 是一项实验性功能][实验性警告:vm.measureMemory 是一项实验性功能]):

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

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

vm.measureMemory();

Node.js 在 64 位平台上启用基于 V8 陷阱处理程序的 WebAssembly 边界检查,通过消除内联边界检查的需要,显著提升 WebAssembly 的性能。此优化需要为每个 WebAssembly 内存实例分配一个大型虚拟内存笼(目前,32 位 WebAssembly 内存通常为 8GB,64 位 WebAssembly 内存为 16GB),以捕获越界访问。在大多数 64 位平台上,虚拟内存地址空间通常足够大(约 128TB),能够满足典型的 WebAssembly 使用场景;但是,如果机器对虚拟内存设置了手动限制(例如通过 ulimit -v),WebAssembly 内存分配更有可能因 WebAssembly.Memory(): could not allocate memory 而失败。

启动时,Node.js 会自动检查是否有足够的虚拟内存可用于分配至少一个笼。如果没有,Node.js 会自动禁用陷阱处理程序优化,使 WebAssembly 能够继续使用内联边界检查运行(但性能较低)。不过,如果应用程序需要创建大量 WebAssembly 内存实例,并且机器仍配置了相对较高的虚拟内存限制,那么由于虚拟内存使用量增加,WebAssembly 内存实例的分配仍可能比预期更快地失败。

--disable-wasm-trap-handler 会完全禁用此优化,使 WebAssembly 内存实例始终使用内联边界检查,而不是保留大型虚拟内存笼。当 Node.js 进程可用的虚拟内存地址空间有限时,这可以创建更多实例。

--disallow-code-generation-from-strings

History

使生成代码的内置语言功能(如 eval 和 new Function)抛出异常。这不影响 Node.js node:vm 模块。

设置 dns.lookup() 和 dnsPromises.lookup() 中 order 的默认值。值可以是:

  • ipv4first:将默认 order 设置为 ipv4first。
  • ipv6first:将默认 order 设置为 ipv6first。
  • verbatim:将默认 order 设置为 verbatim。

默认值为 verbatim,并且 dns.setDefaultResultOrder() 的优先级高于 --dns-result-order。

--enable-fips

History

在启动时启用 [FIPS 模式][]。使用 OpenSSL 3 时,必须有一个名为 fips 的已配置提供程序,并且该提供程序必须成功初始化。使用 OpenSSL 1.1.1 时,Node.js 必须基于支持 FIPS 的 OpenSSL 构建。

--enable-fips-indicator-events

History

将 OpenSSL FIPS 指示器结果发布到 'crypto.fips.indicator' 诊断通道。此选项要求 OpenSSL 3.4 或更高版本。它不会启用 [FIPS 模式][],也不会改变操作是否被允许。

启用堆栈跟踪的 [源映射][] 支持。

使用转译器(如 TypeScript)时,应用程序抛出的堆栈跟踪引用的是转译后的代码,而不是原始源位置。--enable-source-maps 启用源映射的缓存,并尽最大努力报告相对于原始源文件的堆栈跟踪。

覆盖 Error.prepareStackTrace 可能会阻止 --enable-source-maps 修改堆栈跟踪。在覆盖函数中调用并返回原始 Error.prepareStackTrace 的结果以使用源映射修改堆栈跟踪。

const originalPrepareStackTrace = Error.prepareStackTrace;
Error.prepareStackTrace = (error, trace) => {
  // 修改错误和跟踪,并使用原始的 Error.prepareStackTrace 来格式化堆栈跟踪。
  return originalPrepareStackTrace(error, trace);
};

注意,启用源映射可能会在访问 Error.stack 时给应用程序带来延迟。如果在应用程序中频繁访问 Error.stack,请考虑 --enable-source-maps 的性能影响。

--entry-url

History

稳定性: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 相同,但如果文件不存在则不抛出错误。

从相对于当前目录的文件加载环境变量,使它们可用于 process.env 上的应用程序。解析并应用 environment_variables 等配置 Node.js 的环境变量。如果在环境和文件中定义了相同的变量,则环境中的值优先。

您可以传递多个 --env-file 参数。后续文件会覆盖先前文件中定义的现有变量。

如果文件不存在,则抛出错误。

文件的格式应为每行一个环境变量名称和值的键值对,由 = 分隔:

# 之后的任何文本都被视为注释:

# 这是一个注释
PORT=3000 # 这也是一个注释

值可以以以下引号开始和结束:`、" 或 '。它们会从值中省略。

支持多行值:

MULTI_LINE="THIS IS
A MULTILINE"
# 将导致 `THIS IS\nA MULTILINE` 作为值。

键之前的 export 关键字会被忽略:

如果您想从可能不存在的文件加载环境变量,可以改用 --env-file-if-exists 标志。

将以下参数作为 JavaScript 求值。REPL 中预定义的模块也可用于 script。

如果 script 以 - 开头,请使用 = 传递它(例如,node --print --eval=-42),以便将其解析为 --eval 的值。

在 Windows 上,使用 cmd.exe 时单引号将无法正常工作,因为它只识别双 " 进行引号。在 PowerShell 或 Git Bash 中,' 和 " 均可用。

除非提供 --no-strip-types 标志,否则可以运行包含内联类型的代码。

--experimental-addon-modules

History

稳定性:1.2 - 候选发布版

启用对 .node 插件的实验性导入支持。

--experimental-bench

History

稳定性:1 - 实验性

启用实验性的 node:bench 模块和命令行基准测试运行器。

稳定性:1.2 - 候选发布版

如果存在,Node.js 将在指定路径查找配置文件。 如果未指定路径,Node.js 将在当前工作目录中查找 node.config.json 文件。 要指定自定义路径,请使用 --experimental-config-file=path 形式。 不支持空格分隔的 --experimental-config-file path 形式。 别名 --experimental-default-config-file 等同于不带参数的 --experimental-config-file。 Node.js 将读取配置文件并应用设置。配置文件应为具有以下结构的 JSON 文件。$schema 中的 vX.Y.Z 必须替换为您正在使用的 Node.js 版本,或者为该主版本最新版本使用 latest-vX.x。

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

配置文件支持特定于命名空间的选项:

  • nodeOptions 字段包含 NODE_OPTIONS 中允许的 CLI 标志。

  • 命名空间字段(如 test、watch 和 permission)包含特定于该子系统的配置。

配置文件可以使用 nodeVersion 目标指向特定的 Node.js 主版本:

{
  "nodeVersion": 25,
  "nodeOptions": {
    "watch-path": "src"
  }
}

要在同一文件中保留多个特定版本的配置,请使用 configs 数组。Node.js 将使用 nodeVersion 与当前 Node.js 主版本匹配的第一个条目:

{
  "$schema": "https://nodejs.org/dist/latest-v26.x/docs/node-config-schema.json",
  "configs": [
    {
      "nodeVersion": 25,
      "config": {
        "$schema": "https://nodejs.org/dist/latest-v25.x/docs/node-config-schema.json",
        "nodeOptions": {
          "watch-path": "src"
        }
      }
    }
  ]
}

使用 configs 时,顶层只能包含 $schema 和 configs。每个 configs 项必须定义一个整数 nodeVersion 和一个对象 config。单个顶层配置不需要 nodeVersion,但如果存在,则必须与当前 Node.js 主版本匹配。

当配置文件中存在命名空间时,Node.js 会自动启用相应标志(例如 --test、--watch、--permission)。这允许您在不显式在命令行中传递该标志的情况下配置特定子系统的选项。

例如:

{
  "test": {
    "test-isolation": "process"
  }
}

等同于:

要禁用自动标志而仍使用命名空间选项,您可以在命名空间内将标志显式设置为 false:

{
  "test": {
    "test": false,
    "test-isolation": "process"
  }
}

不支持无操作标志。 并非所有 V8 标志目前都受支持。

可以使用官方 JSON 模式验证配置文件,这可能因 Node.js 版本而异。 配置文件中的每个键对应于一个可以作为命令行参数传递的标志。键的值是将传递给标志的值。

例如,上面的配置文件等同于以下命令行参数:

配置中的优先级如下:

  1. NODE_OPTIONS 和命令行选项
  2. Dotenv NODE_OPTIONS
  3. 配置文件

配置文件中的值不会覆盖环境变量、命令行选项或由 --env-file 标志解析的 NODE_OPTIONS env 文件中的值。

键不能在同一或不同命名空间内重复。

如果配置文件包含未知键或不能在命名空间中使用的键,配置解析器将抛出错误。

Node.js 不会清理或验证用户提供的配置,因此切勿使用不可信的配置文件。

--experimental-default-config-file

History

稳定性:1.0 - 早期开发

此标志是 --experimental-config-file 不带参数的别名。
如果存在,Node.js 将在当前工作目录中查找 node.config.json 文件并将其作为配置文件加载。

--experimental-dtls

History

稳定性:1 - 实验性

启用对 DTLS 协议的实验性支持。有关详细信息,请参阅 [dtls 文档][]。

--experimental-eventsource

History

在全局范围启用 EventSource Web API 的暴露。

启用实验性的 import.meta.resolve() 父 URL 支持,这允许传递一个 parentURL 参数进行上下文解析。

之前限制了整个 import.meta.resolve 功能。

--experimental-import-text

History

稳定性:1.0 - 早期开发

启用通过 with { type: 'text' } 导入模块的实验性支持。

--experimental-inspector-network-resource

History

稳定性:1.1 - 积极开发中

启用对检查器网络资源的实验性支持。

不鼓励使用此标志,它可能会在未来的 Node.js 版本中被移除。 请改用 [--import 使用 register()][预加载异步模块自定义钩子]。

指定包含导出的[异步模块自定义钩子][]的 module。module 可以是任何可接受为 [import 说明符][] 的字符串。

如果与[权限模型][]一起使用,此功能需要 --allow-worker。

--experimental-network-inspection

History

稳定性:1 - 实验性

启用与 Chrome DevTools 进行网络检查的实验性支持。

--experimental-package-map=<path>

History

稳定性:1 - 实验性

启用实验性的包映射解析。path 参数指定定义包解析映射的 JSON 配置文件的位置。

启用后,裸说明符解析会查询包映射以进行解析。
这使得可以显式控制哪些包可以导入哪些依赖项。

有关配置文件格式和解析算法的详细信息,请参阅 [包映射][]。

如果 ES 模块图由于包含任何顶层 await 而无法被 require(),此标志允许 Node.js 定位并打印它们的位置。

--experimental-quic

History

稳定性:1.1 - 积极开发中

启用 QUIC 协议的实验性支持。

--experimental-sea-config

History

稳定性:1 - 实验性

使用此标志生成一个 blob,可以将其注入到 Node.js 二进制文件中以生成 [单文件可执行应用程序][]。有关详细信息,请参阅有关 此配置 的文档。

--experimental-shadow-realm

History

使用此标志启用 ShadowRealm 支持。

--experimental-storage-inspection

History

稳定性:1.1 - 积极开发中

启用存储检查的实验性支持。

--experimental-stream-iter

History

稳定性:1 - 实验性

启用实验性 node:stream/iter 模块。

与 node:test 模块结合使用时,代码覆盖率报告将作为测试运行器输出的一部分生成。如果没有运行测试,则不会生成覆盖率报告。有关更多详细信息,请参阅 [从测试中收集代码覆盖率][] 文档。

稳定性:1.0 - 早期开发

在测试运行器中启用模块模拟。

如果与 [权限模型][] 一起使用,此功能需要 --allow-worker。

--experimental-test-tag-filter='<expr>'

History

稳定性:1.0 - 早期开发

仅运行与提供的布尔标签筛选表达式匹配的测试。测试通过 test()、it()、suite() 或 describe() 上的 tags 选项声明标签。标签通过并集从套件继承到嵌套测试。

表达式支持布尔运算符(and/&&、or/||、not/!)、用于分组的括号,以及标识符中的 * 通配符。遵循标准优先级:not 的绑定强度高于 and,而 and 的绑定强度高于 or。完整语法和行为请参阅 Test tags。

该标志可以指定多次;多个表达式按 AND 组合,因此测试必须满足每个表达式才能运行。

格式错误的表达式会导致测试运行器在运行任何测试之前以非零状态退出。

--experimental-vfs

History

稳定性:1 - 实验性

启用实验性的 node:vfs 模块。

--experimental-vm-modules

History

在 node:vm 模块中启用实验性 ES 模块支持。

启用实验性的 WebAssembly 系统接口(WASI)支持。

--experimental-web-worker

History

启用对 Web Worker API 的实验性支持。

--experimental-worker-inspection

History

稳定性:1.1 - 积极开发中

启用与 Chrome DevTools 进行工作线程检查的实验性支持。

--force-context-aware

History

禁止加载不具备[上下文感知能力][]的原生插件。

在启动时启用 [FIPS 模式][],并阻止通过脚本代码禁用该模式。适用于与 --enable-fips 相同的 OpenSSL 要求。

可以使用 --force-fips=mode 指定可选模式:

  • provider:保留 OpenSSL FIPS provider 对未获批准操作的已配置处理方式。不指定模式时,这是当前默认值。
  • strict:拒绝通过 OpenSSL FIPS 指示器回调报告的未获批准操作。此模式需要 OpenSSL 3.4 或更高版本。

strict 模式仅涵盖通过 OpenSSL 默认库上下文的回调报告的操作。它不涵盖使用其他 OSSL_LIB_CTX 或另一份 libcrypto 的原生插件,也不涵盖不会调用该回调的特定于操作的指示器。

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

History

在 Node-API 异步回调上强制触发 uncaughtException 事件。

为了防止现有插件导致进程崩溃,默认情况下不启用此标志。将来,此标志将默认启用,以强制执行正确的行为。

--frozen-intrinsics

History

稳定性:1 - 实验性

启用实验性冻结的内在对象,如 Array 和 Object。

仅支持根上下文。不能保证 globalThis.Array 确实是默认的内在对象引用。在此标志下代码可能会中断。

为了允许添加 polyfill,--require 和 --import 都在冻结内在对象之前运行。

在启动时启动 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 生成的堆分析文件的目录。

默认值由 --diagnostic-dir 命令行选项控制。

指定由 --heap-prof 生成的堆配置文件的平均采样间隔(字节)。默认值为 512 * 1024 字节。

指定由 --heap-prof 生成的堆配置文件的文件名。

当 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: 接近堆限制时的无效标记压缩,分配失败 - JavaScript 堆内存不足
....

--heapsnapshot-signal=signal

History

启用信号处理程序,使 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

History

打印 Node 命令行选项。
此选项的输出不如本文档详细。

--icu-data-dir=file

History

指定 ICU 数据加载路径。(覆盖 NODE_ICU_DATA。)

--import=module

History

稳定性:1 - 实验性

在启动时预加载指定的模块。如果多次提供该标志,每个模块将按出现的顺序依次执行,从 NODE_OPTIONS 中提供的模块开始。

遵循 [ECMAScript 模块][] 解析规则。
使用 --require 加载 [CommonJS 模块][]。
使用 --require 预加载的模块将在使用 --import 预加载的模块之前运行。

模块会被预加载到主线程以及任何工作线程、派生进程或集群进程中。

这将配置 Node.js 将 --eval 或 STDIN 输入解释为 CommonJS 或 ES 模块。有效值为 "commonjs"、"module"、"module-typescript" 和 "commonjs-typescript"。 "-typescript" 值在 --no-strip-types 标志下不可用。 默认值为无值,如果传递 --no-experimental-detect-module 则为 "commonjs"。

如果未提供 --input-type, Node.js 将尝试通过以下步骤检测语法:

  1. 将输入作为 CommonJS 运行。
  2. 如果步骤 1 失败,将输入作为 ES 模块运行。
  3. 如果步骤 2 因 SyntaxError 失败,则剥离类型。
  4. 如果步骤 3 因错误代码 ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX 或 ERR_INVALID_TYPESCRIPT_SYNTAX 失败,则抛出步骤 2 的错误,包括消息中的 TypeScript 错误,否则作为 CommonJS 运行。
  5. 如果步骤 4 失败,将输入作为 ES 模块运行。

为了避免多次语法检测传递的延迟,可以使用 --input-type=type 标志指定应如何解释 --eval 输入。

REPL 不支持此选项。将 --input-type=module 与 --print 一起使用将抛出错误,因为 --print 不支持 ES 模块语法。

--insecure-http-parser

History

在 HTTP 解析器上启用宽松标志。这可能允许与不符合标准的 HTTP 实现进行互操作。

启用后,解析器将接受以下内容:

  • 无效的 HTTP 头值。
  • 无效的 HTTP 版本。
  • 允许消息同时包含 Transfer-Encoding 和 Content-Length 头。
  • 当存在 Connection: close 时,允许消息后存在额外数据。
  • 提供 chunked 后允许额外的传输编码。
  • 允许使用 \n 作为令牌分隔符,而不是 \r\n。
  • 允许在块后不提供 \r\n。
  • 允许在块大小之后和 \r\n 之前存在空格。

以上所有情况都将使您的应用程序暴露于请求走私或投毒攻击。避免使用此选项。

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

History

在 host:port 激活检查器并在用户脚本开始时中断。默认 host:port 为 127.0.0.1:9229。如果指定端口 0,则将使用随机可用端口。

有关 Node.js 调试器的进一步说明,请参阅 [Node.js 的 V8 检查器集成][]。

有关 host 参数使用的 [安全警告][],请参阅下文。

--inspect-port=[host:]port

History

设置激活检查器时使用的 host:port。当通过发送 SIGUSR1 信号激活检查器时很有用。除非传递 --disable-sigusr1。

默认主机为 127.0.0.1。如果指定端口 0,则将使用随机可用端口。

有关 host 参数使用的 [安全警告][],请参阅下文。

指定检查器 WebSocket URL 暴露的方式。

默认情况下,检查器 WebSocket URL 可在 stderr 中获取,并可在 http://host:port/json/list 上的 /json/list 端点下获取。

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

History

在 host:port 上激活检查器并等待调试器附加。默认 host:port 为 127.0.0.1:9229。如果指定端口 0,则将使用随机可用端口。

有关 Node.js 调试器的进一步说明,请参阅 [Node.js 的 V8 检查器集成][]。

有关 host 参数使用的 [安全警告][],请参阅下文。

激活 host:port 上的检查器。默认值为 127.0.0.1:9229。如果指定端口 0,则将使用随机可用端口。

V8 检查器集成允许 Chrome DevTools 和 IDE 等工具调试和配置 Node.js 实例。工具通过 TCP 端口附加到 Node.js 实例,并使用 Chrome DevTools Protocol 进行通信。有关 Node.js 调试器的进一步说明,请参阅 V8 Inspector integration for Node.js。

将检查器绑定到公共 IP(包括 0.0.0.0)并开放端口是不安全的,因为这允许外部主机连接到检查器并执行 [远程代码执行][] 攻击。

如果指定主机,请确保:

  • 主机无法从公共网络访问。
  • 防火墙禁止端口上的未授权连接。

更具体地说,如果端口(默认为 9229)没有防火墙保护,则 --inspect=0.0.0.0 是不安全的。

有关更多信息,请参阅 [调试安全影响][] 部分。

-i, --interactive

History

即使 stdin 看起来不是终端,也打开 REPL。

--jitless

History

稳定性:1 - 实验性。此标志继承自 V8,可能会在上游发生变化。

禁用 可执行内存的运行时分配。出于安全原因,某些平台可能需要此功能。它还可以减少其他平台上的攻击面,但性能影响可能很大。

--localstorage-file=file

History

稳定性:1.2 - 发布候选。

用于存储 localStorage 数据的文件。如果该文件不存在,则在首次访问 localStorage 时创建它。同一个文件可以在多个 Node.js 进程之间并发共享。

指定 HTTP 标头的最大大小(以字节为单位)。默认为 16 KiB。

将 V8 旧内存区(old memory section)的最大内存大小设置为可用系统内存的百分比。
当同时指定此标志和 --max-old-space-size 时,此标志优先。

percentage 参数必须是大于 0 且不超过 100 的数字,表示分配给 V8 堆的可用系统内存百分比。

注意: 此标志利用 --max-old-space-size,由于整数溢出问题,它在 32 位平台上可能不可靠。

# 使用 50% 的可用系统内存
node --max-old-space-size-percentage=50 index.js

# 使用 75% 的可用系统内存
node --max-old-space-size-percentage=75 index.js

--network-family-autoselection-attempt-timeout

History

设置网络族自动选择尝试超时的默认值。 更多信息,请参阅 net.getDefaultAutoSelectFamilyAttemptTimeout()。

--no-addons

History

禁用 node-addons 导出条件以及禁用加载原生插件。当指定 --no-addons 时,调用 process.dlopen 或 require 原生 C++ 插件将失败并抛出异常。

--no-async-context-frame

History

禁用由 AsyncContextFrame 支持的 AsyncLocalStorage 的使用,并使用之前依赖 async_hooks 的实现。保留之前的模型是为了与 Electron 兼容以及用于上下文流可能不同的情况。但是,如果发现流程差异,请报告它。

--no-deprecation

History

屏蔽弃用警告。

--no-experimental-detect-module

History

禁用使用 [语法检测][] 来确定模块类型。

--no-experimental-ffi

History

稳定性:1 - 实验性

禁用实验性的 node:ffi 模块。

此标志仅适用于支持 FFI 的构建版本。

--no-experimental-global-navigator

History

稳定性:1 - 实验性

禁用在全局作用域上暴露 Navigator API。

稳定性:3 - 遗留:请改用 --no-require-module。

--no-require-module 的遗留别名。

禁用实验性的 node:sqlite 模块。

稳定性:1.2 - 发布候选。

禁用 [Web 存储][] 支持。

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

History

隐藏导致退出的致命异常的额外信息。

--no-force-async-hooks-checks

History

禁用 async_hooks 的运行时检查。启用 async_hooks 时,这些检查仍会动态启用。

不要从全局路径中搜索模块(例如 $HOME/.node_modules 和 $NODE_PATH)。

除非连接选项显式启用,否则禁用族自动选择算法。

禁用在 require() 中加载同步 ES 模块图的支持。

请参阅 [使用 require() 加载 ECMAScript 模块][]。

禁用 TypeScript 文件的类型剥离。 更多信息,请参阅 [TypeScript 类型剥离][] 文档。

--no-warnings

History

静默所有进程警告(包括弃用)。

--no-worker-snapshot

History

稳定性:1 - 实验性

启动工作线程时,从头运行内部引导程序,而不是从内置启动快照反序列化已引导的上下文。

--node-memory-debug

History

为 Node.js 内部实现中的内存泄漏启用额外的调试检查。这 通常仅对调试 Node.js 本身的开发人员有用。

--openssl-config=file

History

在启动时加载 OpenSSL 配置文件。该文件可以激活 OpenSSL 3 FIPS 提供程序,或配置支持 FIPS 的 OpenSSL 1.1.1 构建版本。请参阅 [FIPS 模式][]。

此选项优先于 OPENSSL_CONF 环境变量。

--openssl-legacy-provider

History

启用 OpenSSL 3.0 遗留提供程序。更多信息请参阅 OSSL_PROVIDER-legacy。

--openssl-shared-config

History

启用 OpenSSL 默认配置部分 openssl_conf,以便从 OpenSSL 配置文件中读取。默认配置文件名为 openssl.cnf,但可以使用环境变量 OPENSSL_CONF 或命令行选项 --openssl-config 进行更改。 默认 OpenSSL 配置文件的位置取决于 OpenSSL 如何链接到 Node.js。共享 OpenSSL 配置可能会产生不必要的 影响,因此建议使用特定于 Node.js 的配置部分 nodejs_conf; 不使用此选项时,该配置部分为默认配置。

--pending-deprecation

History

发出待定弃用警告。

待定弃用通常与运行时弃用完全相同,但有一个显著的例外:它们默认处于关闭状态,除非设置了 --pending-deprecation 命令行标志或 NODE_PENDING_DEPRECATION=1 环境变量,否则不会发出警告。待定弃用用于提供一种选择性的“预警”机制,开发者可以利用该机制检测对已弃用 API 的使用情况。

为当前进程启用权限模型。启用时, 以下权限受到限制:

另请参阅仅审计模式 --permission-audit, 该模式会记录违规行为,但不会拒绝访问。

--permission-audit

History

启用权限模型的审计模式。启用后会执行权限检查,但不会拒绝访问——不会抛出 ERR_ACCESS_DENIED 错误。相反,每次权限违规都会通过 node:diagnostics_channel 模块发布,并且执行会正常继续。

使用此标志不要求同时指定 --permission。在审计模式下不需要使用 --allow-* 标志,因为不会拒绝访问。

在使用 --permission 部署之前,审计模式有助于发现应用程序所需的权限。有关诊断频道名称列表和消息格式,请参阅 [权限模型][] 文档。

如果同时指定了 --permission 和 --permission-audit, 则以 --permission 为准,权限模型将以强制模式运行。

History

指示模块加载器在解析和 缓存模块时保留符号链接。

默认情况下,当 Node.js 从符号链接到 不同磁盘位置的路径加载模块时,Node.js 会取消引用链接,并使用模块的实际磁盘“真实路径”作为标识符和根 路径来定位其他依赖模块。在大多数情况下,此默认行为 是可以接受的。但是,当使用符号链接的对等依赖时,如下例所示,如果 moduleA 尝试将 moduleB 作为对等依赖进行 require,默认行为会导致抛出异常:

{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。

History

指示模块加载器在解析和 缓存主模块 (require.main) 时保留符号链接。

存在此标志是为了让主模块可以选择加入与 --preserve-symlinks 给予所有其他导入相同的行为;但是,它们是单独的标志, 为了与旧版 Node.js 版本向后兼容。

--preserve-symlinks-main 不隐含 --preserve-symlinks;当 不希望在使用相对路径解析之前跟随符号链接时,请除了 --preserve-symlinks 外还使用 --preserve-symlinks-main。

更多信息请参阅 --preserve-symlinks。

与 -e 相同,但会打印结果。

--process-timeout=duration

History

稳定性:1.1 - 积极开发中

如果进程在 duration 时间后仍在运行,则以代码 124 退出,计时从进程启动时开始。duration 是一个正整数,后跟单位:ms、s、m 或 h,例如 500ms、30s、5m 或 1h。退出码与 timeout(1) 命令使用的退出码相同。

退出前,Node.js 会将主线程正在执行的操作以及使事件循环保持活动状态的资源打印到 stderr:

$ node --process-timeout=5s server.js
(node:25418) Process timed out after 5s (--process-timeout). Exiting with code 124.
Main thread was not executing JavaScript.
Resources keeping the event loop alive:
    TCPServerWrap (listening on [::]:3000, fd 20)
    Timeout x2 (next due in 2931ms)

如果主线程正在执行 JavaScript,则会改为打印其堆栈跟踪。 使用 --report-on-process-timeout 还可生成[诊断报告][]。

进程退出时不会触发 'beforeExit' 和 'exit' 事件,因为可能是 JavaScript 代码使进程保持运行。代码覆盖率和性能分析文件(例如通过 NODE_V8_COVERAGE=dir 或 --cpu-prof 启用的文件)仍会写入。

如果主线程在两秒内没有响应,例如因阻塞于 child_process.execSync() 等同步操作,Node.js 将立即退出,不打印堆栈跟踪和资源信息。

此选项不能用于 NODE_OPTIONS,也不能与启用检查器的选项组合使用,例如 --inspect、 --inspect-brk、--inspect-wait、--inspect-port 和 --inspect-publish-uid;它也不能与 node inspect、--run 或 --build-snapshot 组合使用。启用此选项期间,调用 inspector.open() 和 session.connectToMainThread() 会抛出异常,并且会忽略通过 SIGUSR1 激活检查器的请求。

继承 process.execArgv 的子进程(例如通过 child_process.fork() 创建的子进程)会从各自启动时开始应用超时。使用 --watch 时,超时适用于应用程序的每次运行,而不是监视更改的进程。在[从命令行运行测试][]时,测试运行器进程会将超时应用于整个运行过程,每个在独立进程中运行的测试文件也会应用超时。

--prof

History

生成 V8 性能分析器输出。

--prof-process

History

处理使用 V8 选项 --prof 生成的 V8 性能分析器输出。

--redirect-warnings=file

History

将进程警告写入给定文件,而不是打印到 stderr。如果文件不存在,则创建该文件;如果文件已存在,则追加写入。如果尝试将警告写入文件时发生错误,则警告将写入 stderr。

file 名称可以是绝对路径。如果不是,则写入该文件的默认目录由 --diagnostic-dir 命令行选项控制。

--report-compact

History

以紧凑格式写入报告,即单行 JSON,这比默认的多行格式(为人类阅读而设计)更便于日志处理系统消费。

生成报告的位置。

--report-exclude-env

History

当传入 --report-exclude-env 时,生成的诊断报告将不会包含 environmentVariables 数据。

--report-exclude-network

History

从诊断报告中排除 header.networkInterfaces。默认情况下 未设置此选项,并且报告中包含网络接口。

写入报告的文件名。

如果文件名设置为 'stdout' 或 'stderr',则报告分别写入 进程的 stdout 或 stderr。

启用在导致应用程序终止的致命错误(Node.js 运行时内的内部错误,如内存不足)上触发报告。有助于检查各种诊断数据元素,如堆、堆栈、事件循环状态、资源消耗等,以推理致命错误。

--report-on-process-timeout

History

稳定性:1.1 - 积极开发中

启用 --process-timeout 超时时生成报告,除了打印到 stderr 的摘要之外。可用于检查 JavaScript 和原生堆栈、事件循环状态以及资源消耗,以推断进程未能退出的原因。需要 --process-timeout。

如果工作线程在两秒内没有提供其报告部分,例如因阻塞于 child_process.execSync() 等同步操作,则不会将其纳入报告。

启用在接收到发送给运行中的 Node.js 进程的指定(或预定义)信号时生成报告。触发报告的信号通过 --report-signal 指定。

设置或重置用于生成报告的信号(不支持 Windows)。 默认信号是 SIGUSR2。

启用在进程因未捕获异常退出时生成报告。当结合原生堆栈和其他运行时环境数据检查 JavaScript 堆栈时很有用。

启动时预加载指定模块。

遵循 require() 的模块解析 规则。module 可以是文件路径,也可以是 Node.js 模块名称。

使用 --require 预加载的模块将在使用 --import 预加载的模块之前运行。

模块被预加载到主线程以及任何工作线程、 派生的进程或集群进程中。

这将从 package.json 的 "scripts" 对象运行指定命令。 如果未提供 "command",它将列出可用的脚本。

不带命令传入 --run 时,会列出可用脚本并以非零退出码退出:

$ node --run
Available scripts are:
  test: node --test

--run 会向上遍历到根目录,并找到一个 package.json 文件以从中运行命令。

--run 会将当前目录每个祖先目录中的 ./node_modules/.bin 添加到 PATH 中,以便在存在多个 node_modules 目录时,从不同文件夹中执行二进制文件, 前提是 ancestor-folder/node_modules/.bin 是一个目录。

--run 会在包含相关 package.json 的目录中执行命令。

例如,以下命令将在当前文件夹中的 package.json 内运行 test 脚本:

你也可以向命令传递参数。-- 后的任何参数都将 追加到脚本中:

node --run 并不旨在匹配 npm run 或其他包管理器的 run 命令的行为。Node.js 的实现有意进行了更多限制, 以专注于最常见使用场景下的最高性能。 其他 run 实现中的以下功能被有意排除:

  • 除指定脚本外,同时运行 pre 或 post 脚本。
  • 定义包管理器专用的环境变量。

使用 --run 运行脚本时,会设置以下环境变量:

  • NODE_RUN_SCRIPT_NAME:正在运行的脚本名称。例如,如果使用 --run 运行 test,则此变量的值将为 test。
  • NODE_RUN_PACKAGE_JSON_PATH:正在处理的 package.json 的路径。

从 --env-file 文件中加载的环境变量不会应用于 由 --run 执行的命令。

--secure-heap-min=n

History

使用 --secure-heap 时,--secure-heap-min 标志指定安全堆的最小分配量。最小值为 2。 最大值为 --secure-heap 或 2147483647 中的较小值。 给定的值必须是 2 的幂。

--secure-heap=n

History

初始化一个大小为 n 字节的 OpenSSL 安全堆。初始化后,在密钥生成和其他操作期间,OpenSSL 会将安全堆用于特定类型的分配。例如,这有助于防止敏感信息因指针越界或下溢而泄露。

安全堆的大小是固定的,无法在运行时调整,因此如果使用安全堆,务必选择足够大的堆,以满足应用程序的所有使用需求。

指定的堆大小必须是 2 的幂。任何小于 2 的值都会禁用安全堆。

默认情况下,安全堆处于禁用状态。

Windows 不支持安全堆。

有关更多详细信息,请参阅 CRYPTO_secure_malloc_init。

--snapshot-blob=path

History

稳定性: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 退出。

启动 Node.js 命令行测试运行器。此标志不能与 --watch-path、--check、--eval、--interactive 或检查器结合使用。 有关更多详细信息,请参阅[从命令行运行测试][] 的文档。

--test-concurrency

History

测试运行器 CLI 将并发执行的测试文件的最大数量。如果将 --test-isolation 设置为 'none',则忽略此标志,并发数为 1。否则,并发数默认为 os.availableParallelism() - 1。

--test-coverage-branches=threshold

History

稳定性:1 - 实验性

要求函数覆盖率达到最低百分比。如果代码覆盖率未达到 指定的阈值,进程将以退出码 1 退出。

--test-coverage-include

History

稳定性:1 - 实验性

使用 glob 模式将特定文件包含在代码覆盖率中,该模式可以匹配 绝对和相对文件路径。

可以多次指定此选项以包含多个 glob 模式。

如果同时提供 --test-coverage-exclude 和 --test-coverage-include, 文件必须满足两者标准才能包含在覆盖率报告中。

--test-coverage-include-all

History

稳定性:1 - 实验性

在覆盖率报告中包含测试运行期间从未加载的源文件,并将其报告为覆盖率为零。

候选文件将在当前工作目录中搜索,并接受与报告其余部分相同的 --test-coverage-include 和 --test-coverage-exclude 过滤。

--test-coverage-lines=threshold

History

稳定性:1 - 实验性

要求最低百分比的覆盖行。如果代码覆盖率未达到 指定的阈值,进程将以退出码 1 退出。

--test-force-exit

History

配置测试运行器在所有已知测试运行完毕后退出进程,即使事件循环仍会保持活动状态。

--test-global-setup=module

History

稳定性:1.0 - 早期开发

指定一个模块,该模块将在所有测试执行之前求值,并 可用于为测试设置全局状态或测试固件。

有关更多详细信息,请参阅 [全局设置和 teardown][] 文档。

配置测试运行器中使用的测试隔离类型。当 mode 为 'process' 时,每个测试文件在单独的子进程中运行。当 mode 为 'none' 时,所有测试文件在与测试运行器相同的进程中运行。默认 隔离模式是 'process'。如果不存在 --test 标志,则忽略此标志。有关更多信息,请参阅 [测试运行器执行模型][] 部分。

一个正则表达式,用于配置测试运行器仅执行名称 与提供模式匹配的测试。有关更多详细信息,请参阅 [按名称过滤测试][] 文档。

如果同时提供 --test-name-pattern 和 --test-skip-pattern, 测试必须满足两者要求才能执行。

--test-only

History

配置测试运行器仅执行设置了 only 选项的顶层测试。当禁用测试隔离时,不需要此标志。

--test-random-seed

History

设置用于随机化测试执行顺序的种子。这适用于测试 文件执行顺序和每个文件内的排队测试。提供此标志 会隐式启用随机化,即使没有 --test-randomize。

值必须是 0 到 4294967295 之间的整数。

此标志不能与 --watch 或 --test-rerun-failures 一起使用。

--test-randomize

History

随机化测试执行顺序。这适用于测试文件执行顺序 和每个文件内的排队测试。这有助于检测依赖 共享状态或执行顺序的测试。

用于随机化的种子会打印在测试摘要中,并且可以 与 --test-random-seed 一起重用。

有关详细行为和示例,请参阅 [随机化测试执行顺序][]。

此标志不能与 --watch 或 --test-rerun-failures 一起使用。

--test-reporter

History

运行测试时使用的测试报告器。有关更多详细信息,请参阅 [测试报告器][] 文档。

--test-reporter-destination

History

相应测试报告器的目标。有关更多详细信息,请参阅 [测试报告器][] 文档。

--test-rerun-failures

History

允许测试运行器在运行之间持久化测试套件状态的文件路径。测试运行器将使用此文件来确定哪些测试 已经成功或失败,允许重新运行失败的测试 而不必重新运行整个测试套件。如果此文件不存在,测试运行器将创建它。 有关更多详细信息,请参阅 [测试重新运行][] 文档。

--test-shard

History

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

History

用于配置测试运行器跳过名称与所提供模式匹配的测试的正则表达式。有关更多详细信息,请参阅 [按名称过滤测试][] 文档。

如果同时提供了 --test-name-pattern 和 --test-skip-pattern, 测试必须同时满足两个条件才能运行。

--test-timeout

History

测试将在指定的毫秒数后失败。如果未指定, 子测试将从其父级继承此值。默认值为 Infinity。

重新生成测试运行器用于 [快照测试][] 的快照文件。

--throw-deprecation

History

为弃用抛出错误。

--title=标题

History

在启动时设置 process.title。

--tls-cipher-list=list

History

指定替代默认 TLS 密码套件列表。需要 Node.js 构建时包含 crypto 支持(默认)。

将 TLS 密钥材料记录到文件。密钥材料采用 NSS SSLKEYLOGFILE 格式,可由软件(如 Wireshark)用于解密 TLS 流量。

--tls-max-v1.2

History

将 tls.DEFAULT_MAX_VERSION 设置为 'TLSv1.2'。用于禁用对 TLSv1.3 的支持。

--tls-max-v1.3

History

将默认 tls.DEFAULT_MAX_VERSION 设置为 'TLSv1.3'。用于启用对 TLSv1.3 的支持。

--tls-min-v1.0

History

将默认 tls.DEFAULT_MIN_VERSION 设置为 'TLSv1'。用于与 旧 TLS 客户端或服务器兼容。

--tls-min-v1.1

History

将默认 tls.DEFAULT_MIN_VERSION 设置为 'TLSv1.1'。用于与 旧 TLS 客户端或服务器兼容。

--tls-min-v1.2

History

将默认 tls.DEFAULT_MIN_VERSION 设置为 'TLSv1.2'。这是 12.x 及更高版本的默认值,但支持此选项是为了与旧版 Node.js 版本兼容。

--tls-min-v1.3

History

将默认 tls.DEFAULT_MIN_VERSION 设置为 'TLSv1.3'。用于禁用对 TLSv1.2 的支持,它不如 TLSv1.3 安全。

--trace-deprecation

History

打印弃用的堆栈跟踪。

--trace-env

History

将有关当前 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.env 或 Object.keys(process.env) 的枚举。

仅打印被访问的环境变量的名称。不打印值。

要打印访问的堆栈跟踪,请使用 --trace-env-js-stack 和/或 --trace-env-native-stack。

--trace-env-js-stack

History

除了 --trace-env 所做的之外,这还会打印访问的 JavaScript 堆栈跟踪。

--trace-env-native-stack

History

除了 --trace-env 的功能外,此选项还会打印被访问的原生堆栈跟踪。

--trace-event-categories

History

启用 --trace-events-enabled 后,应进行跟踪的类别列表,以逗号分隔。

--trace-event-file-pattern

History

指定跟踪事件数据文件路径的模板字符串,它支持 ${rotation} 和 ${pid}。

--trace-events-enabled

History

启用跟踪事件信息的收集。

--trace-exit

History

每当环境被主动退出时打印堆栈跟踪, 即调用 process.exit()。

--trace-require-module=mode

History

打印有关 [使用 require() 加载 ECMAScript 模块][] 使用情况的信息。

当 mode 为 all 时,打印所有使用情况。当 mode 为 no-node-modules 时,排除 来自 node_modules 文件夹的使用情况。

--trace-sigint

History

在 SIGINT 上打印堆栈跟踪。

--trace-sync-io

History

每当在事件循环的第一轮之后检测到同步 I/O 时打印堆栈跟踪。

--trace-tls

History

将 TLS 数据包跟踪信息打印到 stderr。这可用于调试 TLS 连接问题。

--trace-uncaught

History

打印未捕获异常的堆栈跟踪;通常,打印与 创建 Error 关联的堆栈跟踪,而这使 Node.js 还 打印与抛出值关联的堆栈跟踪(该值不必 是 Error 实例)。

启用此选项可能会对垃圾回收行为产生负面影响。

--trace-warnings

History

打印进程警告(包括弃用)的堆栈跟踪。

--track-heap-objects

History

跟踪堆对象分配以用于堆快照。

使用此标志允许更改发生未处理拒绝时应发生的情况。可以选择以下模式之一:

  • throw:发出 unhandledRejection。如果未设置此钩子,则将未处理的拒绝作为未捕获异常抛出。这是默认值。
  • strict:将未处理的拒绝作为未捕获异常抛出。如果异常已处理,则发出 unhandledRejection。
  • warn:始终触发警告,无论是否设置了 unhandledRejection 钩子,但不打印弃用警告。
  • warn-with-error-code:发出 unhandledRejection。如果未设置此钩子,则触发警告,并将进程退出代码设置为 1。
  • none:静默所有警告。

如果在命令行入口点的 ES 模块静态 加载阶段发生拒绝,它将始终将其作为未捕获异常抛出。

--use-bundled-ca、--use-openssl-ca

History

使用当前 Node.js 版本提供的捆绑 Mozilla CA 存储, 或使用 OpenSSL 的默认 CA 存储。默认存储可在 构建时选择。

Node.js 提供的捆绑 CA 存储是发布时固定的 Mozilla CA 存储 快照。它在所有支持的平台上都是相同的。

使用 OpenSSL 存储允许对外部修改存储。对于大多数 Linux 和 BSD 发行版,此存储由发行版 维护者和系统管理员维护。OpenSSL CA 存储位置取决于 OpenSSL 库的配置,但这可以在运行时使用 环境变量更改。

请参阅 SSL_CERT_DIR 和 SSL_CERT_FILE。

--use-env-proxy

History

稳定性:1.1 - 积极开发

启用后,Node.js 会在启动期间解析 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量,并通过指定的代理路由请求。

仅将此选项用于部署中受信任且已授权的代理。代理支持旨在通过授权的代理服务器访问外部网络,例如防火墙需要代理时。它不用于隐藏流量或规避网络策略。另请参阅 [内置代理支持][]。

这等同于设置 NODE_USE_ENV_PROXY=1 环境变量。两者同时设置时,--use-env-proxy 优先生效。

--use-largepages=mode

History

此选项已不再受支持,且不起作用。它过去会在启动时将 Node.js 静态代码重新映射到大内存页。

为兼容性起见,此选项仍接受以下值:

  • off:不会尝试映射。这是默认值。
  • on:不会尝试映射,并会向标准错误输出一条消息,说明此选项已不再受支持。
  • silent:与 off 相同。

Node.js 使用系统存储中存在的受信任 CA 证书,以及 --use-bundled-ca 选项和 NODE_EXTRA_CA_CERTS 环境变量。 在 Windows 和 macOS 以外的平台上,这会从 OpenSSL 信任的目录 和文件加载证书,类似于 --use-openssl-ca,不同之处在于 它在首次加载后缓存证书。

在 Windows 和 macOS 上,证书信任策略类似于 [Chromium 的本地受信任证书策略][],但有一些差异:

在 macOS 上,尊重以下设置:

  • 默认和系统钥匙串
    • 信任:
      • 任何“使用此证书时”标志设置为“始终信任”的证书,或
      • 任何“安全套接字层(SSL)”标志设置为“始终信任”的证书。
    • 证书还必须有效,且“X.509 基本策略”设置为“始终信任”。

在 Windows 上,尊重以下设置:

  • 本地计算机(通过 certlm.msc 访问)
    • 信任:
      • 受信任的根证书颁发机构
      • 受信任的人员
      • 企业信任 -> 企业 -> 受信任的根证书颁发机构
      • 企业信任 -> 企业 -> 受信任的人员
      • 企业信任 -> 组策略 -> 受信任的根证书颁发机构
      • 企业信任 -> 组策略 -> 受信任的人员
  • 当前用户(通过 certmgr.msc 访问)
    • 信任:
      • 受信任的根证书颁发机构
      • 企业信任 -> 组策略 -> 受信任的根证书颁发机构

在 Windows 和 macOS 上,Node.js 会在使用受信任 证书之前检查用户的设置是否未禁止它们用于 TLS 服务器身份验证。

Node.js 当前不支持基于系统设置从不信任/吊销来自其他来源的证书。

在其他系统上,Node.js 从默认证书文件 (通常为 /etc/ssl/cert.pem)和默认证书目录(通常为 /etc/ssl/certs)加载证书,Node.js 链接的 OpenSSL 版本尊重这些证书。 这通常适用于主要 Linux 发行版和其他 类 Unix 系统上的约定。如果覆盖了 OpenSSL 环境变量 (通常为 SSL_CERT_FILE 和 SSL_CERT_DIR,取决于 Node.js 链接的 OpenSSL 的配置 ),则将使用指定路径加载 证书。如果 Node.js 链接的 OpenSSL 版本使用的约定路径 由于某种原因与用户拥有的系统配置不一致,这些环境变量可用作变通方法。

--v8-options

History

打印 V8 命令行选项。

--v8-pool-size=num

History

设置 V8 的线程池大小,这将用于分配后台任务。

如果设置为 0,则 Node.js 将根据并行度的估计值选择适当的线程池大小。

并行度是指在给定机器中可以 同时进行的计算数量。通常,它与 CPU 数量相同,但在 VM 或容器等环境中可能不同。

-v, --version

History

打印 node 的版本。

--vfs-load=source

History
Attributes
source:string
要挂载并运行的目录或归档文件。

需要 --experimental-vfs。最多只能指定一次。

将 source 挂载为虚拟文件系统(node:vfs),并通过该挂载而非真实文件系统解析入口点及后续所有 require()/import。挂载点是 Node.js 指定的保留挂载点,因此不会遮蔽真实路径,也无法选择目标位置。入口点的获取方式与 node <directory> 相同:使用挂载中的 package.json 的 "main",或 index.js。任何位置命令行参数都属于程序自身的参数(可从 process.argv[2] 起获取),而不是入口点覆盖参数。

process.argv[1] 报告的是 source,而非保留挂载点,因为挂载点是一个不透明的实现细节。

用于挂载 source 的提供程序根据 source 本身而非其文件名选择:

  • 目录使用以该目录为根的 RealFSProvider 挂载。
  • 字节内容为 ZIP 归档的文件使用 ZipProvider 挂载,因此归档可以使用任意名称。

首先会按注册顺序的逆序查询通过 vfs.registerProvider() 注册的提供程序(通常来自使用 --require 或 --import 预加载的模块),它们可以认领目录和文件。如果没有提供程序认领该 source,Node.js 将退出并报错。

在工作线程中,--vfs-load 会挂载但不会加载:工作线程会继承该挂载并运行自己的入口点,而入口点本身可能位于该挂载中。

源在每个挂载它的线程中都会挂载到相同的保留挂载点,无论该线程还挂载了什么,因此指向挂载内的路径在所有线程中都表示相同内容。

使用自己的 execArgv 创建的工作线程不会继承父线程的任何选项,因此根本不会挂载源。要运行来自该挂载的脚本,必须再次为此类工作线程提供相同的选项,即 --experimental-vfs 和 --vfs-load;否则,该线程没有可供脚本加载的挂载,工作线程将无法加载脚本。--experimental-vfs 也用于让工作线程自己的代码能够使用 node:vfs。脚本来自其他位置(例如真实文件系统)的工作线程则无需添加任何内容。

NODE_OPTIONS 中不允许使用 --vfs-load:运行哪个入口点由命令行决定,环境不得重定向它。

以监视模式启动 Node.js。 在监视模式下,被监视文件中的更改会导致 Node.js 进程 重启。 默认情况下,监视模式将监视入口点 和任何通过 require 或 import 导入的模块。 使用 --watch-path 指定要监视的路径。

此标志不能与 --check、--eval、--interactive 或 REPL 组合。

注意:--watch 标志需要文件路径作为参数,并且与 --run 或内联脚本输入不兼容,因为 --run 优先并忽略监视 模式。如果未提供文件,Node.js 将以状态码 9 退出。

--watch-kill-signal

History

稳定性:1.1 - 积极开发

自定义在监视模式重启时发送给进程的信号。

--watch-path

History

以监视模式启动 Node.js 并指定要监视的路径。 在监视模式下,被监视路径中的更改会导致 Node.js 进程 重启。 即使与 --watch 组合使用,这也将关闭对通过 require 或 import 加载的模块的监视。

此标志不能与 --check、--eval、--interactive、--test 或 REPL 组合。

注意:使用 --watch-path 隐式启用 --watch,这需要文件路径 并且与 --run 不兼容,因为 --run 优先并忽略监视模式。

此选项仅在 macOS 和 Windows 上支持。 当在不支持它的平台上使用此选项时,将抛出 ERR_FEATURE_UNAVAILABLE_ON_PLATFORM 异常。

--watch-preserve-output

History

禁用当监视模式重启进程时清除控制台。

--zero-fill-buffers

History

自动将所有新分配的 Buffer 实例填充为零。

稳定性:2 - 稳定

FORCE_COLOR 环境变量用于启用 ANSI 彩色输出。该值可以是:

  • 1、true 或空字符串 '',表示支持 16 色,
  • 2,表示支持 256 色,或
  • 3,表示支持 1600 万色。

当使用 FORCE_COLOR 并将其设置为受支持的值时,NO_COLOR 和 NODE_DISABLE_COLORS 环境变量都会被忽略。

任何其他值都会导致彩色输出被禁用。

为 Node.js 实例启用[模块编译缓存][]。有关详细信息,请参阅[模块编译缓存][]的文档。

设置为 1 时,只要模块相对于缓存目录的布局保持不变,[模块编译缓存][]就可以在不同目录位置之间重复使用,并且可供任何用户使用(缓存子目录不会附加创建用户的 uid)。

NODE_COMPILE_CACHE_READONLY=1

History

设置为 1 时,[模块编译缓存][]只会从其目录中读取现有条目:不会向其中写入任何内容,如果目录不存在,也不会创建它。

NODE_DEBUG=module[,…]

History

应打印调试信息的核心模块的 ',' 分隔列表。

应打印调试信息的核心 C++ 模块的 ',' 分隔列表。

NODE_DISABLE_COLORS=1

History

设置后,REPL 中不使用颜色。

NODE_DISABLE_COMPILE_CACHE=1

History

稳定性:1.1 - 积极开发中

为 Node.js 实例禁用[模块编译缓存][]。有关详细信息,请参阅[模块编译缓存][]的文档。

NODE_EXTRA_CA_CERTS=file

History

设置后,已知的“根”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

History

ICU(Intl 对象)数据的路径。当编译为支持 small-icu 时,将链接扩展数据。

NODE_NO_WARNINGS=1

History

当设置为 1 时,进程警告将被静默。

NODE_OPTIONS=options...

History

以空格分隔的命令行选项列表。options... 会在命令行选项之前解析,因此命令行选项会覆盖 options... 中的任何内容,或与其后续内容组合。如果使用了不允许在环境中使用的选项(例如 -p 或脚本文件),Node.js 将以错误退出。

如果选项值包含空格,可以使用双引号对其进行转义:

作为命令行选项传递的单例标志会覆盖传递给 NODE_OPTIONS 的相同标志:

# 检查器将在端口 5555 上可用
NODE_OPTIONS='--inspect=localhost:4444' node --inspect=localhost:5555

可多次传递的标志将按照先处理 NODE_OPTIONS 实例、再处理命令行实例的顺序进行处理:

NODE_OPTIONS='--require "./a.js"' node --require "./b.js"
# 等同于:
node --require "./a.js" --require "./b.js"

允许使用以下 Node.js 选项。如果某个选项同时支持 --XX 和 --no-XX 形式,则两者都受支持,但下方列表中只包含其中一种形式。

  • --allow-addons
  • --allow-child-process
  • --allow-env
  • --allow-ffi
  • --allow-fs-read
  • --allow-fs-vfs
  • --allow-fs-write
  • --allow-inspector
  • --allow-net
  • --allow-openssl-store
  • --allow-wasi
  • --allow-worker
  • --bench-isolation
  • --bench-name-pattern
  • --bench-reporter-destination
  • --bench-reporter
  • --bench-samples
  • --bench-warmup
  • --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-indicator-events
  • --enable-fips
  • --enable-network-family-autoselection
  • --enable-source-maps
  • --entry-url
  • --experimental-abortcontroller
  • --experimental-addon-modules
  • --experimental-bench
  • --experimental-detect-module
  • --experimental-dtls
  • --experimental-eventsource
  • --experimental-import-meta-resolve
  • --experimental-import-text
  • --experimental-json-modules
  • --experimental-loader
  • --experimental-modules
  • --experimental-package-map
  • --experimental-print-required-tla
  • --experimental-quic
  • --experimental-repl-await
  • --experimental-require-module
  • --experimental-shadow-realm
  • --experimental-specifier-resolution
  • --experimental-stream-iter
  • --experimental-test-isolation
  • --experimental-top-level-await
  • --experimental-vfs
  • --experimental-vm-modules
  • --experimental-wasi-unstable-preview1
  • --experimental-web-worker
  • --experimental-websocket
  • --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
  • --network-family-autoselection-attempt-timeout
  • --no-addons
  • --no-async-context-frame
  • --no-deprecation
  • --no-experimental-ffi
  • --no-experimental-global-navigator
  • --no-experimental-sqlite
  • --no-experimental-strip-types
  • --no-experimental-webstorage
  • --no-extra-info-on-fatal-exception
  • --no-force-async-hooks-checks
  • --no-global-search-paths
  • --no-network-family-autoselection
  • --no-strip-types
  • --no-warnings
  • --no-webstorage
  • --no-worker-snapshot
  • --node-memory-debug
  • --openssl-config
  • --openssl-legacy-provider
  • --openssl-shared-config
  • --pending-deprecation
  • --permission-audit
  • --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-module
  • --require, -r
  • --secure-heap-min
  • --secure-heap
  • --snapshot-blob
  • --test-coverage-branches
  • --test-coverage-exclude
  • --test-coverage-functions
  • --test-coverage-include-all
  • --test-coverage-include
  • --test-coverage-lines
  • --test-global-setup
  • --test-isolation
  • --test-name-pattern
  • --test-only
  • --test-random-seed
  • --test-randomize
  • --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-heap-size
  • --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[:…]

History

添加到模块搜索路径前缀的 ':' 分隔目录列表。

在 Windows 上,这是一个 ';' 分隔的列表。

NODE_PENDING_DEPRECATION=1

History

当设置为 1 时,发出待弃用警告。

待弃用通常与运行时弃用相同,但显著的区别在于它们默认是_关闭_的,除非设置了 --pending-deprecation 命令行标志或 NODE_PENDING_DEPRECATION=1 环境变量,否则不会发出。待弃用用于提供一种选择性“早期警告”机制,开发人员可以利用它来检测已弃用的 API 使用情况。

设置管道服务器在等待连接时的挂起管道实例句柄数量。此设置仅适用于 Windows。

NODE_PRESERVE_SYMLINKS=1

History

设置为 1 时,指示模块加载器在解析和缓存模块时保留符号链接。

设置后,进程警告将发送到给定文件,而不是打印到 stderr。如果文件不存在,将创建该文件;如果存在,将追加内容。如果尝试将警告写入文件时发生错误,警告将改为写入 stderr。这等同于使用 --redirect-warnings=file 命令行标志。

用于加载内置 REPL 位置的 Node.js 模块路径。将此值覆盖为空字符串 ('') 将使用内置 REPL。

NODE_REPL_HISTORY=file

History

用于存储持久化 REPL 历史记录的文件路径。默认路径是 ~/.node_repl_history,此变量将覆盖该路径。将该值设置为空字符串('' 或 ' ')将禁用持久化 REPL 历史记录。

NODE_SKIP_PLATFORM_CHECK=value

History

如果 value 为 '1',则在 Node.js 启动期间跳过对受支持平台的检查。Node.js 可能无法正常执行。在不受支持的平台上遇到的任何问题都不会得到修复。

如果 value 等于 'child',则会覆盖测试报告器选项,并且测试输出将以 TAP 格式发送到 stdout。如果提供了其他任何值,Node.js 不保证所使用的报告器格式或其稳定性。

如果 value 等于 '0',则会禁用 TLS 连接的证书验证。这会导致 TLS,以及由此扩展的 HTTPS 变得不安全。强烈不建议使用此环境变量。

NODE_USE_ENV_PROXY=1

History

稳定性:1.1 - 积极开发中

启用后,Node.js 会在启动期间解析 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY 环境变量,并通过指定的代理路由请求。

仅在代理是受信任且经授权用于该部署时才使用此功能。代理支持旨在通过授权的 代理服务器访问外部网络,例如防火墙要求使用代理时。它并不是用于隐藏 流量或规避网络策略。参见[内置代理支持][]。

这也可以通过 --use-env-proxy 命令行标志启用。 当两者都设置时,--use-env-proxy 优先。

NODE_USE_SYSTEM_CA=1

History

Node.js 使用系统存储中存在的受信任 CA 证书,以及 --use-bundled-ca 选项和 NODE_EXTRA_CA_CERTS 环境变量。

也可以使用 --use-system-ca 命令行标志启用此功能。当两者都设置时,--use-system-ca 优先。

设置后,Node.js 将开始输出 [V8 JavaScript 代码覆盖率][] 和 Source Map 数据到作为参数提供的目录(覆盖信息以 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
      ]
    }
  }
}

### `NODE_REPL_HISTORY`

[`NODE_REPL_HISTORY`][] 是 `NODE_REPL_HISTORY_SIZE` 的别名。环境变量的值是任意的。

### `NODE_EXTRA_CA_CERTS`

<!-- YAML
added: v6.11.0
-->

在启动时加载 OpenSSL 配置文件。该文件可用作 [FIPS 模式][] 配置的一部分。

如果该变量设置为空值,Node.js 将在不加载任何 OpenSSL 配置文件的情况下启动。这是绕过默认配置文件的一种方式,例如,当 Node.js 运行用户无法访问 `/etc/ssl` 时,虽然该文件存在但无法读取,否则这会导致启动失败。在这种情况下,不会应用任何配置,包括该文件本来会执行的任何 [FIPS 模式][] 设置。

如果使用了 [`--openssl-config`][] 命令行选项,则会忽略环境变量,空值也不会产生任何影响。

### `NODE_OPTIONS`

<!-- YAML
added: v7.7.0
-->

如果启用了 `--use-openssl-ca`,或者在 macOS 和 Windows 以外的平台上启用了 `--use-bundled-ca`,这将覆盖并设置 OpenSSL 包含受信任证书的目录。

请注意,除非显式设置子环境,否则任何子进程都将继承此环境变量,如果它们使用 OpenSSL,可能会导致它们信任与 node 相同的 CA。

### `NODE_OPENSSL_CERT_FILE`

<!-- YAML
added: v7.7.0
-->

如果启用了 `--use-openssl-ca`,或者在 macOS 和 Windows 以外的平台上启用了 `--use-bundled-ca`,这将覆盖并设置 OpenSSL 包含受信任证书的文件。

请注意,除非显式设置子环境,否则任何子进程都将继承此环境变量,如果它们使用 OpenSSL,可能会导致它们信任与 node 相同的 CA。

### `TZ`

<!-- YAML
added: v0.0.1
changes:
  - version:
     - v16.2.0
    pr-url: https://github.com/nodejs/node/pull/38642
    description:
      使用 process.env.TZ = 更改 TZ 变量也会在 Windows 上更改时区。
  - version:
     - v13.0.0
    pr-url: https://github.com/nodejs/node/pull/20026
    description:
      使用 process.env.TZ = 更改 TZ 变量会在 POSIX 系统上更改时区。
-->

`TZ` 环境变量用于指定时区配置。

虽然 Node.js 不支持 [在其他环境中的处理方式][] 的所有各种方式,但它支持基本的 [时区 ID][](例如 `America/New_York`、`Europe/Paris` 或 `Asia/Tokyo`)。它可能支持一些其他缩写或别名,但强烈不鼓励使用且不保证支持。

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

将 libuv 线程池中使用的线程数设置为 size 个线程。

只要可能,Node.js 就会使用异步系统 API,但在它们不存在的地方,libuv 的线程池用于基于同步系统 API 创建异步 Node.js 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 有一套自己的 CLI 选项。任何提供给 node 的 V8 CLI 选项都将传递给 V8 处理。V8 的选项_无稳定性保证_。V8 团队本身并不认为它们是其正式 API 的一部分,并保留随时更改它们的权利。同样,它们也不受 Node.js 稳定性保证的覆盖。许多 V8 选项仅与 V8 开发人员有关。尽管如此,仍有一小部分 V8 选项广泛适用于 Node.js,在此文档中:

指定进程的最大堆大小(以兆字节为单位)。

此选项通常用于限制进程可用于其 JavaScript 堆的内存量。

设置 V8 旧内存部分的最大内存大小。当内存消耗接近限制时,V8 将花费更多时间在垃圾回收上,以努力释放未使用的内存。

在具有 2 GiB 内存的机器上,考虑将其设置为 1536(1.5 GiB),以便为其他用途留出一些内存并避免交换。

设置 V8 的 [Scavenge 垃圾收集器][] 的最大 [半空间][] 大小,单位为 MiB(兆二进制字节)。 增加半空间的最大大小可能会提高 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

错误堆栈跟踪中收集的最大堆栈帧数。 将其设置为 0 可禁用堆栈跟踪收集。默认值为 10。