Node.js 具有各种各样的命令行选项。 这些选项暴露了内置调试、多种执行脚本的方式、以及其他有用的运行时选项。

要在终端中将本文档作为手册页查看,请在 PowerShell 运行 man node

node [options] [V8 options] [script.js | -e “script” | -] [—] [arguments]
node inspect [script.js | -e “script” | :] …

不带参数执行将启动交互式解释器 (REPL)。

所有选项,包括 V8 选项,都允许用破折号 (-) 或下划线 (_) 分隔单词。 例如,—pending-deprecation 等价于 —pending_deprecation。

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

选项

—prof

生成 V8 分析器输出。

—cpu-prof

新增于: v12.0.0
启动时开始 V8 CPU 分析器,并且在退出前将 CPU 分析文件写入磁盘。
如果未指定—cpu-prof-dir,则生成的分析文件放在当前工作目录中。
如果未指定 —cpu-prof-name,则生成的分析文件名为 CPU.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.cpuprofile。

—cpu-prof-dir

指定放置 —cpu-prof 生成的 CPU 分析文件的目录
默认值由 —diagnostic-dir 命令行选项控制。

—cpu-prof-interval

为 —cpu-prof 生成的 CPU 分析文件指定以微秒为单位的采样间隔。 默认为 1000 微秒。

—cpu-prof-name

指定 —cpu-prof 生成的 CPU 分析文件的文件名。

—heap-prof

新增于: v12.4.0
在启动时开始 V8 堆分析器,并在退出前将堆分析器写入磁盘。
如果未指定—heap-prof-dir,则生成的分析文件放在当前工作目录中。
如果未指定 —heap-prof-name,则生成的分析文件名为 Heap.${yyyymmdd}.${hhmmss}.${pid}.${tid}.${seq}.heapprofile。

—heap-prof-dir

指定 —heap-prof 生成的堆分析文件将被放置的目录。
默认值由 —diagnostic-dir 命令行选项控制。

—heap-prof-interval

指定 —heap-prof 生成的堆分析文件的平均采样间隔(以字节为单位)。 默认为 512 * 1024 字节

—heap-prof-name

指定 —heap-prof 生成的堆分析文件的文件名。

—enable-source-maps

启用 Source Map v3 对堆栈跟踪的支持。
当使用诸如 TypeScript 之类的转译器时,应用程序抛出的堆栈跟踪会引用转译后的代码,而不是原始源位置。 —enable-source-maps 启用源映射缓存并尽最大努力报告相对于原始源文件的堆栈跟踪。
覆盖 Error.prepareStackTrace 可防止 —enable-source-maps 修改堆栈跟踪。

—inspect[=[host:]port]

在 host:port 上激活检查器。 默认为 127.0.0.1:9229。
V8 检查器集成允许 Chrome 开发者工具和 IDE 等工具调试和分析 Node.js 实例。 该工具通过 tcp 端口连接到 Node.js 实例,并使用 Chrome 开发者工具协议进行通信。

注意:绑定检查器到公共的“IP:端口”组合是不安全的

将检查器绑定到具有开放端口的公共 IP(包括 0.0.0.0)是不安全的,因为它允许外部主机连接到检查器并执行远程代码执行攻击。
如果指定主机,请确保:

  • 无法从公共网络访问该主机。
  • 防火墙不允许端口上不需要的连接。 更具体地说,如果端口(默认情况下为 9229)不受防火墙保护,则 —inspect=0.0.0.0 是不安全的。

有关详细信息,请参阅调试安全隐患章节。

—max-http-header-size=size

版本 变更
v13.13.0 将 HTTP 标头的最大默认大小从 8 KB 更改为 16 KB

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

—throw-deprecation

为弃用抛出错误。

—no-deprecation

静默弃用警告。

—no-warnings

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

—preserve-symlinks

指示模块加载器在解析和缓存模块时保留符号链接。
默认情况下,当 Node.js 从符号链接到不同磁盘位置的路径加载模块时,Node.js 将取消引用该链接并使用模块的实际磁盘“真实路径”作为既是标识符又是定位其他依赖模块的根路径。 在大多数情况下,这种默认行为是可以接受的。 但是,当使用符号链接的对等依赖项时,如下例所示,如果 moduleA 尝试要求 moduleB 作为对等依赖项,则默认行为会引发异常:
image.png
—preserve-symlinks 命令行标志指示 Node.js 使用模块的符号链接路径而不是实际路径,从而允许找到符号链接的对等依赖项。
但是请注意,使用 —preserve-symlinks 会产生其他副作用。 具体来说,如果这些模块是从依赖树中的多个位置链接的,那么符号链接的原生模块可能无法加载(Node.js 会将它们视为两个单独的模块,并会尝试多次加载该模块,从而导致异常被抛出)。
—preserve-symlinks 标志不适用于允许 node —preserve-symlinks node_module/.bin/ 工作的主模块。 要对主模块应用相同的行为,也请使用 —preserve-symlinks-main。

—preserve-symlinks-main

指示模块加载器在解析和缓存主模块 (require.main) 时保留符号链接。
此标志的存在是为了让主模块可以选择加入 —preserve-symlinks 为所有其他导入提供的相同行为;但是,它们是单独的标志,以便与旧的 Node.js 版本向后兼容。
—preserve-symlinks-main 并不意味着 —preserve-symlinks;当在解析相对路径之前不希望遵循符号链接时,除了 —preserve-symlinks 之外,还使用 —preserve-symlinks-main。

—redirect-warnings=file

将进程警告写入给定文件而不是打印到标准错误。 如果文件不存在则创建,如果存在则追加。 如果在尝试将警告写入文件时发生错误,则警告将改为写入标准错误。
file 名称可以是绝对路径。 如果不是,则它将被写入的默认目录由 —diagnostic-dir 命令行选项控制。

—report-compact

以紧凑的单行 JSON 格式编写报告,与专为人类使用而设计的默认多行格式相比,日志处理系统更易于使用。

—report-dir=directory, report-directory=directory

生成报告的位置。

—report-filename=filename

将写入报告的文件的名称。

—report-on-fatalerror

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

—report-on-signal

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

—report-uncaught-exception

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

—title=title

在启动时设置 process.title。

—trace-events-enabled

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

—trace-exit

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

—trace-uncaught

打印未捕获异常的堆栈跟踪;通常,打印与创建 Error 相关的堆栈跟踪,而这使得 Node.js 也打印与抛出值相关的堆栈跟踪(不需要是 Error 实例)
启用此选项可能会对垃圾回收行为产生负面影响

—unhandled-rejections=mode

版本 变更
v15.0.0 将默认模式更改为 throw。 预先触发了警告。

使用此标志可以改变发生未经处理的拒绝时应该发生的事情。 可以选择以下模式之一

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

-v, —version

打印 node 的版本。

-h, —help

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

—v8-options

打印 V8 命令行选项。

—v8-pool-size=num

设置 V8 的线程池大小,用于分配后台作业。
如果设置为 0,则 V8 将根据在线处理器的数量选择合适大小的线程池。
如果提供的值大于 V8 的最大值,则选择最大值。

-c, —check

语法检查脚本而不执行。

-e, —eval “script”

将以下参数作为 JavaScript 评估。 交互式解释器中预定义的模块也可以在 script 中使用。
在 Windows 上,使用 cmd.exe 单引号将无法正常工作,因为它只能识别双 “ 进行引用。 在 Powershell 或 Git bash 中,’ 和 “ 都可用。

-p, —print “script”

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

-i, —interactive

即使标准输入似乎不是终端,也会打开交互式解释器。

-r, —require module

在启动时预加载指定的模块。
遵循 require() 的模块解析规则。 module 可以是文件路径,也可以是 node 模块名称。
仅支持 CommonJS 模块。 尝试使用 —require 预加载 ES6 模块,则将失败并显示错误。

环境变量

FORCE_COLOR=[1, 2, 3]

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

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

当使用 FORCE_COLOR 并设置为支持的值时,NO_COLOR 和 NODE_DISABLE_COLORS 环境变量都将被忽略。
任何其他值都会导致彩色输出被禁用。

NODE_DISABLE_COLORS=1

当设置时,颜色将不会在交互式解释器中使用。

NODE_NO_WARNINGS=1

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

NODE_REPL_HISTORY=file

用于存储持久的交互式解释器历史的文件路径。 默认路径是 ~/.node_repl_history,会被此变量覆盖。 将值设置为空字符串(’’ 或 ‘ ‘)会禁用持久的交互式解释器历史记录。

NODE_REPL_EXTERNAL_MODULE=file

Node.js 模块的路径,该模块将代替内置交互式解释器加载。 将此值覆盖为空字符串 (‘’) ,则将使用内置的交互式解释器。

NODE_SKIP_PLATFORM_CHECK=value

新增于: v14.5.0
如果 value 等于 ‘1’,则在 Node.js 启动期间跳过对支持平台的检查。 Node.js 可能无法正确地执行。 在不受支持的平台上遇到的任何问题都不会得到修复。

NODE_TLS_REJECT_UNAUTHORIZED=value

如果 value 等于 ‘0’,则对 TLS 连接禁用证书验证。 这使得 TLS 和 HTTPS 不安全。 强烈建议不要使用此环境变量。

TZ

版本 变更
v16.2.0 使用 process.env.TZ = 更改 TZ 变量也相当于更改 Windows 上的时区。
v13.0.0 使用 process.env.TZ 更改 TZ 变量相当于更改 POSIX 系统上的时区。

TZ 环境变量用于指定时区配置。
虽然 Node.js 对 TZ 的支持不会处理所有 TZ在其他环境中处理的方式,但它将支持基本的时区 ID(例如 ‘Etc/UTC’、’Europe/Paris’ 或 ‘America/New_York’)。 它可能支持其他一些缩写或别名,但强烈建议不要使用这些缩写或别名,并且不能保证。