全面掌握Node命令选项

本文讲的是全面掌握Node命令选项,

译者按: 作为Node.js开发者,有必要全面了解一下Node命令的所有选项,这样在关键时刻才能得心应手。

  • 原文: Mastering the Node.js CLI & Command Line Options
  • 译者: Fundebug

为了保证可读性,本文采用意译而非直译。

Node命令有很多选项,可以用于调试代码。这篇博客全面介绍了Node命令,可以提高大家的工作效率。

查看Node命令选项

使用man命令可以获取Node命令的所有选项:


$ man node

Usage: node [options] [ -e script | script.js ] [arguments]

node debug script.js [arguments]

Options:

-v, --version print Node.js version

-e, --eval script evaluate script

-p, --print evaluate script and print result

-c, --check syntax check script without executing

...

有Usage信息可知,所有选项都是可选的,且需要放在脚本之前。

index.js如下:


console.log(new Buffer(100))

--zero-fill-buffers选项将所有新创建Buffer初始化为0:


--zero-fill-buffers

Automatically zero-fills all newly allocated Buffer and SlowBuffer instances.

使用--zero-fill-buffers选项的命令如下


$ node --zero-fill-buffers index.js

这样的话,输出结果全部为0,而不是随机的序列:


<Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... >

Node命令常用选项

--version 或 -v

执行 node --version或者 node -v,可以查看Node版本信息。-v--version的缩写,其他选项也有对应的缩写。


$ node -v

v6.10.0

--eval 或 -e

使用--eval 选项,可以直接在终端执行Node.js代码。REPL中定义的模块,例如http 、 fs等都可以直接使用,不需要require。


$ node -e 'console.log(3 + 2)'

5

--print 或 -p

--print选项与--eval选项的功能类似,但是--print选项可以打印表达式的结果。--eval选项使用console.log的话可以达到相同的效果。


$ node -p '3 + 2'

5

--check 或-c

Node v4.2.0之后才有

使用--check,则会检查代码的语法(并不会执行代码)。

index.js如下:


console.log(new Buffer(100)

可知,代码中缺少了一个),如果使用node index.js执行的话则会出错:


/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js:1

(function (exports, require, module, __filename, __dirname) { console.log(new Buffer(100)

^

SyntaxError: missing ) after argument list

at Object.exports.runInThisContext (vm.js:76:16)

at Module._compile (module.js:542:28)

at Object.Module._extensions..js (module.js:579:10)

at Module.load (module.js:487:32)

at tryModuleLoad (module.js:446:12)

at Function.Module._load (module.js:438:3)

at Module.runMain (module.js:604:10)

at run (bootstrap_node.js:394:7)

使用node --check index.js命令,可以在不执行代码的情况下检查到同样的错误。两者输出结果非常相似,但是使用--check选项时没有执行代码,因此没有错误栈(stack trace):


/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js:1

(function (exports, require, module, __filename, __dirname) { console.log(new Buffer(100)

^

SyntaxError: missing ) after argument list

at startup (bootstrap_node.js:144:11)

at bootstrap_node.js:509:3

--inspect[=host:port]

node v6.3.0之后才有

使用node --inspect选项可以在指定的地址(host)和端口(port)开启监控器。如果没有指定地址和端口,则默认为127.0.0.1:9229。Chrome调试工具(Chrome Debugging Protocol)通过该端口绑定Node.js进程。

--inspect-brk[=host:port]

node v7.6.0之后才有

--inspect-brk选项与--inspect选项的功能相同,只是它会在代码第一行就暂停。


$ node --inspect-brk index.js

Debugger listening on port 9229.

Warning: This is an experimental feature and could change at any time.

To start debugging, open the following URL in Chrome:

chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/86dd44ef-c865-479e-be4d-806d622a4813

运行命令之后,使用Chrome浏览器访问输出中提示的URL地址chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/86dd44ef-c865-479e-be4d-806d622a4813就可以调试Node.js代码了。

--zero-fill-buffers

node v6.0.0之后才有

使用--zero-fill-buffers选项可以使所有新创建的Buffer初始化为0。 这样做可以防止内存中的敏感信息泄露。

注意,仅当需要防止内存敏感信息泄露时才使用该选项,因为它会严重影响代码性能。

另外,下面这些Buffer构造器在node v6.0.0已经弃用了。

Also note, that some Buffer constructors got deprecated in v6.0.0:

  • new Buffer(array)
  • new Buffer(arrayBuffer[, byteOffset [, length]])
  • new Buffer(buffer)
  • new Buffer(size)
  • new Buffer(string[, encoding])

所以,应该使用 Buffer.alloc(size[, fill[, encoding]])Buffer.from(array)Buffer.from(buffer),Buffer.from(arrayBuffer[, byteOffset[, length]]) 和 Buffer.from(string[, encoding]).

关于Node.js的内存安全问题,可以查看博客Exploiting Buffer

--prof-process

使用 --prof-process选项,Node.js进程将输出V8引擎的性能记录信息(profiler)

首先,使用--prof选项执行代码:


node --prof index.js

运行之后,工作目录中将生成一个新文件,前缀为isolate-

然后,使用--prof-process选项执行代码:


node --prof-process isolate-0x102001600-v8.log > output.txt

output.txt文件中有V8引擎的性能记录信息,比如: C++代码花了多少时间,JavaScript代码花了多少时间,那个函数调用花了最多时间。如下:


[C++]:

ticks total nonlib name

16 18.4% 18.4% node::ContextifyScript::New(v8::FunctionCallbackInfo<v8::Value> const&)

4 4.6% 4.6% ___mkdir_extended

2 2.3% 2.3% void v8::internal::String::WriteToFlat<unsigned short>(v8::internal::String*, unsigned short*, int, int)

2 2.3% 2.3% void v8::internal::ScavengingVisitor<(v8::internal::MarksHandling)1, (v8::internal::LoggingAndProfiling)0>::ObjectEvacuationStrategy<(v8::internal::ScavengingVisitor<(v8::internal::MarksHandling)1, (v8::internal::LoggingAndProfiling)0>::ObjectContents)1>::VisitSpecialized<24>(v8::internal::Map*, v8::internal::HeapObject**, v8::internal::HeapObject*)

[Summary]:

ticks total nonlib name

1 1.1% 1.1% JavaScript

70 80.5% 80.5% C++

5 5.7% 5.7% GC

0 0.0% Shared libraries

16 18.4% Unaccounted

访问官方文档,可以查看Node命令的所有选项。


V8引擎选项

使用--v8-options选项可以打印所有的V8引擎选项。

目前,V8引擎提供了上百个选项,这篇博客只是介绍了其中几个。这些选项可以大大地改变V8引擎的行为,因此需要慎重使用。

--harmony

使用--harmony选项,则在代码中可以使用所有harmony特性(即正在开发的特性,例如在低版本的Node中使用ES6特性)。

--max_old_space_size

使用--max_old_space_size选项,可以调整老生代内存空间(old space,用于储存存活时间较长或常驻内存的对象)的最大值,这个将直接影响Node.js进程可以使用的内存大小。在内存较小的情况下,这个选项将非常方便,因为我们可以限制Node.js进程对内存的使用。

--optimize_for_size

使用--optimize_for_size选项,V8引擎会优化内存空间的使用,这样很可能会降低应用的执行速度。同样,在内存较小的情况下,这个选项将非常方便。

环境变量

NODE_DEBUG=module[,…]

设置NODE_DEBUG环境变量可以打印Node.js核心模块的调试信息。例如,下面的命令可以查看module模块的调试信息(你也可以查看其它模块,例如http, fs等):


$ NODE_DEBUG=module node index.js

输出如下(可知,module模块负责加载代码调用的各个模块):


MODULE 7595: looking for "/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js" in ["/Users/gergelyke/.node_modules","/Users/gergelyke/.node_libraries","/Users/gergelyke/.nvm/versions/node/v6.10.0/lib/node"]

MODULE 7595: load "/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js" for module "."

NODE_PATH=path

使用NODE_PATH,可以指定Node.js进程搜索模块的额外目录。

OPENSSL_CONF=file

使用OPENSSL_CONF,可以指定OpenSSL的配置文件。






原文发布时间为:2017年4月25日


本文来自合作伙伴掘金,了解相关信息可以关注掘金网站。

时间: 2024-09-20 09:44:22

全面掌握Node命令选项的相关文章

Oracle RMAN备份(二)Backup 命令选项

五. Backup 命令选项 5.1 压缩 默认情况下,RMAN 执行NULL 数据块压缩. 5.1.1 NULL 控制压缩 使用这种形式的压缩时,Oracle不会备份未使用的数据块. 执行NULL 数据块压缩的情形有一下两种情况: (1)从未使用过的数据块不被压缩 (2)在给定的特定标准下,使用过一次的数据块也不被备份. 在第一种情况下,将不会备份其中一直没有数据的所有数据块,在第二种情况下,如果数据库和关联的数据库满足某种标准,空块将不被备份,即使 它在某个时刻包含数据. 下面是允许RMAN

Win7系统开始菜单没有“运行”命令选项怎么找回?

Win7系统开始菜单没有"运行"命令选项怎么找回?             具体方法如下: 1.首先检查自定义「开始」菜单中是否勾选"运行命令"选项,如果已经勾选的话,那么可以在组策略编辑器中启用将运行命令添加到开始菜单选项; 2.首先在win7操作系统中使用组合键"Win+R"打开运行窗口,然后在运行窗口中输入"gpedit.msc"按回车键或确定打开组策略编辑器管理窗口; 3.打开组策略设置窗口后,在左侧菜单列表中依次展开

ffmpeg命令选项解释

ffmpeg作为媒体文件处理软件,基本用法如下: ffmpeg -i INPUTfile [OPTIONS] OUTPUTfile 输入输出文件通常就是待处理的多媒体文件了.可以是纯粹的音频文件,纯粹的视频文件,或者混合的.ffmpeg主持绝大部分的常见音频, 视频格式,象常见的各mpeg,AVI封装的DIVX和Xvid等等,具体的格式支持列表可以使用ffmpeg -formats查看或直接查阅文档. 另外,由于Linux把设备视为文件爱你,因此,-i 选项后可以跟设备名.比如DV,视频卡,光驱

10个 ssh 简单命令选项

一个系统管理员可能会同时管理着多台服务器,这些服务器也许会放在不同的地方.要亲自一台一台的去访问来管理它们显然不是最好的方法,通过远程控制的方法应该是最有效的.远程访问最通用的一款应用程序就是SSH(什么?你还用telnet?....$%@%&W@$##). SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议.使用该协议的数据将被加密,如果在传输中间数据泄漏,也可以确保没有人能读取出有用信息.要使用 SSH,目标机器应该安装 SSH 服务端应用程序,因为 SSH 是基于

U-boot中怎么添加命令选项

在command.h中分析命令结构 /* 这是定义一个结构的属性,将其放在.u_boot_cmd这个段当中,相当于.data/.bss这些段 */ #define Struct_Section  __attribute__ ((unused,section (".u_boot_cmd")))    #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)  cmd_tbl_t __u_boot_cmd_##name Struct_Secti

《Node应用程序构建——使用MongoDB和Backbone》一第 1 章 Node.js基本介绍1.1 Node和npm命令

第 1 章 Node.js基本介绍 写给PHP开发者的Node.js学习指南 我们假定你有一个PHP代码库需要移植到Node.js.在可预见的未来你需要为用户提供PHP和Node.js两个代码库,这意味着你需要同步更新和改进这两个代码库.但是你并不了解Node.js,也没有做过任何有关Node.js的开发.那么该从哪里下手呢? 首先需要下载支持你的平台的Node.js,可能是Linux或者Windows版本(是的!Node.js还提供了Windows的版本!).因为每个版本的安装方法和安装工具都

详解Node.js如何开发命令行工具_node.js

前言 Node 给前端开发带来了很大的改变,促进了前端开发的自动化,我们可以简化开发工作,然后利用各种工具包生成生产环境.如运行sass src/sass/main.scss dist/css/main.css即可编译 Sass 文件. 在实际的开发过程中,我们可能会有自己的特定需求, 那么我们得学会如何创建一个Node命令行工具. hello world 老规矩第一个程序为hello world.在工程中新建bin目录,在该目录下创建名为helper的文件,具体内容如下: #!/usr/bin

warden,create命令的--bind_mounts选项

问题描述 自己在ubuntu10.04的服务器上搭了一个warden的环境,在命令行直接create可以成功创建container.查看create--helpcreate命令提供--bind_mounts选项,用于完成宿主机和虚拟机的文件路径映射,create--help的内容如下:command:createdescription:Createacontainer,optionallypassoptions.usage:create[options][options]canbeoneofth

PHP 和 Node.js 的10项对比挑战

在最近 SitePoint 的 PHP vs Node.js Smackdown 一文中,Craig Buckler 对两种语言就如何应对一系列的10个挑战进行了比较来决定哪一个总体上更佳. Craig 在书中讲到,这些比较总是有些矛盾.作为一个有意思的随访,我们要求 Bruno Škvorc (SitePoint 的 PHP 开发者)和 James Hibbard (SitePoint 的一个 JavaScript 开发者)对每一轮提供评论. 下面是他们详细的看法- 第一轮:开始 Round