本文档介绍了 Node.js 命令行接口,包括命令语法、选项以及 Node.js 如何处理命令行参数。有关影响 Node.js 的环境变量的信息,请参阅环境变量。
Node.js 命令行接口遵循以下模式:
node [options] [V8 options] [<program-entry-point> | -e "script" | -] [--] [arguments]
您也可以在不带参数的情况下运行 Node.js,以启动 REPL(Read-Eval-Print Loop)交互式会话。
Node.js 按特定顺序处理命令行参数,选项具有不同的优先级。
命令行参数中的选项优先于 NODE_OPTIONS 环境变量中指定的选项。
来源:doc/api/cli.md57-74 src/node_options.cc243-313
程序入口点指定了 Node.js 应执行的 JavaScript 文件。如果不是绝对路径,Node.js 会将其相对于当前工作目录解析。文件将根据以下规则加载:
--import 等标志强制,则作为 ES 模块加载。.mjs 或 .wasm,则作为 ES 模块加载。.cjs 扩展名,并且最近的 package.json 文件包含 "type": "module",则作为 ES 模块加载。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- 开头 |
-:从标准输入读取脚本--:标记 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 操作Node.js 提供内置的性能分析功能。
--cpu-prof:启动时开始 V8 CPU 性能分析器--cpu-prof-dir:CPU 性能分析文件的目录--cpu-prof-name:CPU 性能分析文件的自定义名称--heap-prof:启动时开始 V8 堆栈性能分析器--heap-prof-dir:堆栈分析文件的目录--heap-prof-name:堆栈分析文件的自定义名称Node.js 采用结构化的方法来定义和处理命令行选项。实现被组织成几个类:
选项解析器在 Node.js 启动过程的早期挂钩到命令行处理中。它在 Node.js 执行任何 JavaScript 代码之前解析和验证选项。
来源:src/node_options.h47-375 src/node_options.cc38-113 src/node_options.cc243-365
命令行选项的处理流程在 Node.js 初始化期间进行处理。
这种架构允许不同范围的选项:
来源:src/node_options.cc74-113 lib/internal/process/pre_execution.js45-190
在 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-modules | ES 模块对 WebAssembly 的支持 |
| VM 模块 | --experimental-vm-modules | VM 模块中的 ES 模块支持 |
| 源映射 | --enable-source-maps | 堆栈跟踪的源代码映射支持 |
| Shadow realm | --experimental-shadow-realm | ShadowRealm API 支持 |
| Node.js 快照 | --build-snapshot | 生成 V8 启动快照 |
Node.js 会将以 --v8- 开头的选项传递给 V8 JavaScript 引擎。您可以通过运行以下命令来查看所有可用的 V8 选项:
node --v8-options
在 Node.js 和 V8 选项中,都可以使用双连字符(-)和下划线(_)作为分隔符。
可用的命令行选项会因 Node.js 版本而异。新选项通常会带有 --experimental- 前缀,然后在后续版本中成为稳定的功能。编写依赖于命令行选项的脚本时,建议检查特定版本的文档。
来源: CHANGELOG.md1-214 doc/changelogs/CHANGELOG_V18.md1-80 doc/changelogs/CHANGELOG_V20.md1-113