菜单

命令行界面

相关源文件

本文档介绍了 Node.js 命令行接口,包括命令语法、选项以及 Node.js 如何处理命令行参数。有关影响 Node.js 的环境变量的信息,请参阅环境变量

概要

Node.js 命令行接口遵循以下模式:

node [options] [V8 options] [<program-entry-point> | -e "script" | -] [--] [arguments]
  • options:Node.js 特有的选项
  • V8 options:传递给 V8 JavaScript 引擎的选项
  • program-entry-point:要执行的 JavaScript 文件
  • -e "script":要评估的 JavaScript 代码
  • -:从标准输入读取脚本
  • --:表示 Node.js 选项的结束
  • arguments:传递给脚本的参数

您也可以在不带参数的情况下运行 Node.js,以启动 REPL(Read-Eval-Print Loop)交互式会话。

来源:doc/api/cli.md1-22

命令行处理

Node.js 按特定顺序处理命令行参数,选项具有不同的优先级。

命令行参数中的选项优先于 NODE_OPTIONS 环境变量中指定的选项。

来源:doc/api/cli.md57-74 src/node_options.cc243-313

程序入口点

程序入口点指定了 Node.js 应执行的 JavaScript 文件。如果不是绝对路径,Node.js 会将其相对于当前工作目录解析。文件将根据以下规则加载:

  1. 如果被 --import 等标志强制,则作为 ES 模块加载。
  2. 如果文件扩展名为 .mjs.wasm,则作为 ES 模块加载。
  3. 如果文件没有 .cjs 扩展名,并且最近的 package.json 文件包含 "type": "module",则作为 ES 模块加载。
  4. 否则,它将作为 CommonJS 模块加载。

来源:doc/api/cli.md24-53

选项类别

Node.js 命令行选项可分为以下几类:

类别描述示例
运行时行为影响运行时行为的选项--abort-on-uncaught-exception--trace-warnings
模块系统与模块加载相关的选项--input-type--conditions--experimental-import-meta-resolve
调试用于调试和检查的选项--inspect--inspect-brk--enable-source-maps
安全与安全功能相关的选项--disable-proto--frozen-intrinsics
权限模型用于权限系统的选项--permission--allow-fs-read--allow-child-process
性能分析用于 CPU 和堆栈性能分析的选项--cpu-prof--heap-prof
实验版用于实验性功能的选项--experimental- 开头

来源:doc/api/cli.md54-3599

关键命令行选项

基本选项

  • -:从标准输入读取脚本
  • --:标记 Node.js 选项的结束
  • -e, --eval "script":将后续参数评估为 JavaScript
  • -p, --print "script":与 -e 相同,但会打印结果
  • -c, --check:不执行,仅检查脚本语法
  • -i, --interactive:即使标准输入不是终端也打开 REPL
  • -r, --require module:在启动时预加载指定的模块

来源:doc/api/cli.md76-96 doc/api/cli.md419-431 doc/api/cli.md877-894

模块系统选项

  • --input-type=type:为字符串输入设置模块类型(commonjs|module|commonjs-typescript|module-typescript)
  • -C, --conditions=condition:为条件导出解析添加自定义条件
  • --experimental-import-meta-resolve:启用 import.meta.resolve() 的实验性支持
  • --experimental-loader=module:使用自定义模块加载器
  • --experimental-wasm-modules:启用 WebAssembly 模块的实验性支持

来源:doc/api/cli.md997-1017 doc/api/cli.md445-467

调试选项

  • --inspect[=[host:]port]:在 host:port 上激活调试器(默认:127.0.0.1:9229)
  • --inspect-brk[=[host:]port]:激活调试器并在脚本开始时中断
  • --enable-source-maps:启用堆栈跟踪的源映射支持

来源:doc/api/cli.md325-354 doc/api/cli.md740-771

权限模型选项

权限模型允许限制 Node.js 可以访问的内容。它通过 --permission 启用,并可通过以下方式进行微调:

  • --allow-fs-read=path:允许对特定路径进行文件系统读取
  • --allow-fs-write=path:允许对特定路径进行文件系统写入
  • --allow-child-process:允许生成子进程
  • --allow-worker:允许创建工作线程
  • --allow-addons:允许加载原生插件
  • --allow-wasi:允许 WASI 操作

来源:doc/api/cli.md109-215

性能分析选项

Node.js 提供内置的性能分析功能。

  • --cpu-prof:启动时开始 V8 CPU 性能分析器
  • --cpu-prof-dir:CPU 性能分析文件的目录
  • --cpu-prof-name:CPU 性能分析文件的自定义名称
  • --heap-prof:启动时开始 V8 堆栈性能分析器
  • --heap-prof-dir:堆栈分析文件的目录
  • --heap-prof-name:堆栈分析文件的自定义名称

来源:doc/api/cli.md482-534

选项实现架构

Node.js 采用结构化的方法来定义和处理命令行选项。实现被组织成几个类:

选项解析器在 Node.js 启动过程的早期挂钩到命令行处理中。它在 Node.js 执行任何 JavaScript 代码之前解析和验证选项。

来源:src/node_options.h47-375 src/node_options.cc38-113 src/node_options.cc243-365

选项处理流程

命令行选项的处理流程在 Node.js 初始化期间进行处理。

这种架构允许不同范围的选项:

  • 进程选项(对 Node.js 进程全局)
  • 隔离(isolate)选项(特定于 V8 隔离)
  • 环境选项(特定于 Node.js 环境)
  • 调试选项(与调试器相关)

来源:src/node_options.cc74-113 lib/internal/process/pre_execution.js45-190

以编程方式访问和使用 CLI 选项

在 Node.js 代码中,您可以访问启动进程时使用的命令行选项。

  • process.execArgv 数组包含传递给进程的 Node.js 选项。
  • 可以访问 process 对象各种属性的单独解析的选项。
  • 一些选项会在 process 对象上创建别名,例如,为 --eval 创建的 process._eval

来源: lib/internal/process/pre_execution.js198-271

实验性功能

Node.js 使用 --experimental-* 前缀来表示尚未稳定的功能。这些选项会启用可能在未来版本中更改或移除的功能。

实验性功能选项描述
模块自定义--experimental-loader自定义模块加载钩子
WebAssembly 模块--experimental-wasm-modulesES 模块对 WebAssembly 的支持
VM 模块--experimental-vm-modulesVM 模块中的 ES 模块支持
源映射--enable-source-maps堆栈跟踪的源代码映射支持
Shadow realm--experimental-shadow-realmShadowRealm API 支持
Node.js 快照--build-snapshot生成 V8 启动快照

来源: doc/api/cli.md901-1226

与 V8 选项的互操作性

Node.js 会将以 --v8- 开头的选项传递给 V8 JavaScript 引擎。您可以通过运行以下命令来查看所有可用的 V8 选项:

node --v8-options

在 Node.js 和 V8 选项中,都可以使用双连字符(-)和下划线(_)作为分隔符。

来源: doc/api/cli.md57-69

Node.js 版本之间的更改

可用的命令行选项会因 Node.js 版本而异。新选项通常会带有 --experimental- 前缀,然后在后续版本中成为稳定的功能。编写依赖于命令行选项的脚本时,建议检查特定版本的文档。

来源: CHANGELOG.md1-214 doc/changelogs/CHANGELOG_V18.md1-80 doc/changelogs/CHANGELOG_V20.md1-113