Node.js v20.3.1 文档


环境变量#

FORCE_COLOR=[1, 2, 3]#

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

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

当使用 FORCE_COLOR 并设置为支持的值时,NO_COLORNODE_DISABLE_COLORS 环境变量都将被忽略。

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

NODE_DEBUG=module[,…]#

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

NODE_DEBUG_NATIVE=module[,…]#

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

NODE_DISABLE_COLORS=1#

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

NODE_EXTRA_CA_CERTS=file#

设置后,众所周知的 "root" CA(如 VeriSign)将使用 file 中的额外证书进行扩展。 该文件应包含一个或多个 PEM 格式的可信证书。 如果文件丢失或格式不正确,则将使用 process.emitWarning() 触发消息消息(一次),否则将忽略任何错误。

当为 TLS 或 HTTPS 客户端或服务器显式指定 ca 选项属性时,则既不会使用众所周知的证书,也不会使用额外的证书。

node 作为 setuid root 运行或设置了 Linux 文件功能时,则将忽略此环境变量。

NODE_EXTRA_CA_CERTS 环境变量仅在 Node.js 进程第一次启动时读取。 在运行时使用 process.env.NODE_EXTRA_CA_CERTS 更改值对当前进程没有影响。

NODE_ICU_DATA=file#

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

NODE_NO_WARNINGS=1#

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

NODE_OPTIONS=options...#

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

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

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

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

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

可以多次传入的标志将被视为首先传入其 NODE_OPTIONS 实例,然后是其命令行实例:

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

允许的 Node.js 选项是:

  • --allow-child-process
  • --allow-fs-read
  • --allow-fs-write
  • --allow-worker
  • --conditions-C
  • --diagnostic-dir
  • --disable-proto
  • --dns-result-order
  • --enable-fips
  • --enable-network-family-autoselection
  • --enable-source-maps
  • --experimental-abortcontroller
  • --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
  • --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-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
  • --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#

当设置时,进程警告将触发到给定文件而不是打印到标准错误 如果文件不存在则创建,如果存在则追加。 如果在尝试将警告写入文件时发生错误,则警告将改为写入标准错误。 这相当于使用 --redirect-warnings=file 命令行标志。

NODE_REPL_HISTORY=file#

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

NODE_REPL_EXTERNAL_MODULE=file#

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

NODE_SKIP_PLATFORM_CHECK=value#

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

NODE_TEST_CONTEXT=value#

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

NODE_TLS_REJECT_UNAUTHORIZED=value#

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

NODE_V8_COVERAGE=dir#

设置后,Node.js 将开始将 V8 JavaScript 代码覆盖率源映射 数据输出到作为参数提供的目录(覆盖信息以 JSON 格式写入具有 coverage 前缀的文件)。

NODE_V8_COVERAGE 将自动传播到子进程,从而更容易检测调用 child_process.spawn() 系列函数的应用。 NODE_V8_COVERAGE 可以设置为空字符串,防止传播。

覆盖输出#

覆盖率作为顶层键 result 上的 ScriptCoverage 对象数组输出:

{
  "result": [
    {
      "scriptId": "67",
      "url": "internal/tty.js",
      "functions": []
    }
  ]
} 

源映射缓存#

稳定性: 1 - 实验

如果找到,则源映射数据将附加到 JSON 覆盖对象上的顶层键 source-map-cache

source-map-cache 是一个对象,其中的键代表从中提取源映射的文件,其值包括原始源映射网址(在键 url 中)、解析的 Source Map v3 信息(在键 data 中)和行长度源文件(在键 lineLengths 中)。

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

NO_COLOR=<any>#

NO_COLORNODE_DISABLE_COLORS 的别名。 环境变量的值是任意的。

OPENSSL_CONF=file#

在启动时加载 OpenSSL 配置文件。 除其他用途外,如果 Node.js 是使用 ./configure --openssl-fips 构建的,则可用于启用符合 FIPS 的加密。

如果使用 --openssl-config 命令行选项,则环境变量将被忽略。

SSL_CERT_DIR=dir#

如果启用了 --use-openssl-ca,则将覆盖并设置包含受信任证书的 OpenSSL 目录。

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

SSL_CERT_FILE=file#

如果启用了 --use-openssl-ca,则将覆盖并设置包含受信任证书的 OpenSSL 文件。

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

TZ#

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

虽然 Node.js 不支持所有各种 TZ 在其他环境中的处理方式,但它支持基本的 时区 ID(例如 'Etc/UTC''Europe/Paris''America/New_York')。 它可能支持其他一些缩写或别名,但强烈建议不要使用这些缩写或别名,并且不能保证。

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

UV_THREADPOOL_SIZE=size#

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

Node.js 尽可能使用异步的系统 API,但在它们不存在的情况下,libuv 的线程池用于基于同步的系统 API 创建异步的 node API。 使用线程池的 Node.js API 有:

  • 所有 fs API,除了文件监视器 API 和那些显式同步的
  • 异步加密 API,例如 crypto.pbkdf2()crypto.scrypt()crypto.randomBytes()crypto.randomFill()crypto.generateKeyPair()
  • dns.lookup()
  • 所有 zlib API,除了那些显式同步的

因为 libuv 的线程池有固定的大小,这意味着如果这些 API 中的任何一个由于某种原因需要很长时间,则在 libuv 的线程池中运行的其他(看似无关的)API 的性能将会下降。 为了缓解此问题,潜在的解决方案是通过将 'UV_THREADPOOL_SIZE' 环境变量设置为大于 4(其当前默认值)的值来增加 libuv 线程池的大小。 有关详细信息,请参阅 libuv 线程池文档