Node.js 命令行(CLI)的使用及命令行选项

 2016年11月11日    167     声明


Node.js 安装后,会同时提供一个命令行(CLI)工具。通过这个命令行工具,可以运行Node程序。通过它提供的一些命令参数选项,这些参数向内置的调试器,提供了多种脚本执行方式及其它有用的运行选项。

  1. 语法格式
  2. 选项参数
  3. 环境变量

1. 语法格式

Node.js 安装后,node命令会随之安装。该命令的有如下几种语法格式:

node [options] [v8 options] [script.js | -e "script"] [arguments]
node debug [script.js | -e "script" | <host>:<port>] …
node --v8-options

当输入node命令,而不输入任何参数时,会进入REPL模式。请参考:

当输入node debug命令时,会启动Node.js内置的调试器。请参考:

使用示例

对于一个Web服务器,运行并访问它,会响应一个'itbilu.com'

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('itbilu.com\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

将其保存为example.js文件,并使用node命令运行它:

$ node example.js
Server running at http://127.0.0.1:3000/


2. 选项参数

-v, --version

显示 ode的版本号

添加于v0.1.3


-h, --help

显示node命令行选项参数,可以通过这个参数查看当前版本的Node所支持的所有选项。但该参数输出参数说明较为简洁,查看详细文档可以使用man nodeinfo node

添加于v0.1.3


-e, --eval "script"

将后面的参数做为JavaScript执行。执行的模块可以是在REPL中预定义的,也可以是"script"参数。

添加于v0.5.2


-p, --print "script"

等价于-e参数,但会输出结果。

添加于v0.6.4


-c, --check

检查脚本语法是否正确,但不执行。

添加于v5.0.0


-i, --interactive

打开REPL即使stdin还没有在终端出现。

添加于v0.7.7


-r, --require module

指定在启动时预加载的模块。

该参数与require()的模块加载规则相同,module可以是一个文件路径或模块名。

添加于v1.6.0


--no-deprecation

使用已移除特性时,静默处理警告信息。

添加于v0.8.0


--trace-deprecation

使用已移除特性时,打印堆栈信息。

添加于v0.8.0


--throw-deprecation

使用已移除特性时,抛出错误。

添加于v0.11.11


--no-warnings

屏蔽所有警告信息

添加于v6.0.0


--trace-warnings

出现警告时,打印堆栈信息

添加于v6.0.0


--trace-sync-io

在事件第一个事件循环后,打印同步I/O的堆栈信息

添加于v2.1.0


--zero-fill-buffers

自动使用0填充BufferSlowBuffer实例。

添加于v6.0.0


--trace-preserve-symlinks

添加于v6.3.0

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

默认情况下,Node.js从指定路径加载一个模块时,路径是一个象征性地链接到硬盘的不同位置。Node.js会引用链接和模块的实际路径做为一个模块标识,并做为一个定位到其它依赖模块的根路径。在大多数情况下,这种处理方式是可行的。但是,有时这个链接会有同伴依赖(peer dependency)。

如下所示,默认情况下当模块moduleA企图引用moduleB时,由于有同伴依赖会抛出一个异常:

{appDir}
 ├── app
 │   ├── index.js
 │   └── node_modules
 │       ├── moduleA -> {appDir}/moduleA
 │       └── moduleB
 │           ├── index.js
 │           └── package.json
 └── moduleA
     ├── index.js
     └── package.json
--preserve-symlinks选项会使Node.js为相对真实路径模块使用符号链接路径,从而使同伴依赖的路径可以被发现。


--track-heap-objects

跟踪堆快照的堆对象分配。

添加于v2.4.0


--prof-process

使用v8--profv8进程输出分析

添加于v6.0.0


--v8-options

输出v8的命令行选项。

注意:v8的命令行选项支持横线-和下划线两种_两种方式。如:--stack-trace-limit选项等同于--stack_trace_limit

添加于v0.1.3


--tls-cipher-list=list

指定可替代TLS密码的列表

添加于v4.0.0


--enable-fips

启用FIPS兼容的密码启动(需要Node.js编译时使用./configure --openssl-fips参数)

添加于v6.0.0


--force-fips

强制使用FIPS兼容的密码启动(需要启用--enable-fips选项)

添加于v6.0.0


--openssl-config=file

在启动时加载OpenSSL配置文件

添加于v6.9.0


--icu-data-dir=file

指定ICU数据路径(会替换NODE_ICU_DATA

添加于v6.9.0


3. 环境变量

NODE_DEBUG=module[,…]

','-分隔,指定要打印调试信息的核心模块列表

添加于v0.1.32


NODE_PATH=path[:…]

':'-分隔,指定搜索目录模块路径的前缀列表

注意:Windows系统中会以';'分隔

添加于v0.1.32


NODE_DISABLE_COLORS=1

设置为1时不会用在REPL

添加于v0.3.0


NODE_ICU_DATA=file

ICU (Intl object) 数据路径

添加于v0.11.15


NODE_REPL_HISTORY=file

持久化存储REPL历史文件的路径。默认为~/.node_repl_history,可以通过变量重写。设置为空字符串时(""" ")会禁用持久化REPL历史。

添加于v3.0.0


NODE_TTY_UNSAFE_ASYNC=1

设置为1时,写到stdinstdoutstderr时会阻塞异步TTY输出。不建议使用这种模式

添加于v6.4.0