全面掌握Node命令选项
发布于 1 年前 作者 Fundebug 2614 次浏览 来自 分享

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

原文:掌握Node.js的CLI和命令行选项 译者:Fundebug 为了保证可读性,本文采用意译而非直译。

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

查看Node命令选项

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

$ man节点 用法:node [options] [ -e script | script.js] [arguments]
节点调试script.js [arguments] 选项:
-v,–version 打印 Node.js版本 -e,–eval脚本评估脚本 -p,-- print评估脚本和打印结果 -c, - 检查语法检查脚本而不执行 … 有使用信息可知,所有选项都是可选的,且需要放在脚本之前。

index.js如下:

console .log(new Buffer(100)) –zero-fill-buffers选项将所有新创建缓冲区初始化为0:

  • 零填充缓冲区 自动填充所有新分配的缓冲区和SlowBuffer实例。 使用–zero-fill-buffers选项的命令如下

$ node --zero-fill-buffers index.js 这样的话,输出结果全部为0,而不是随机的序列:

<缓冲区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 …> 节点命令常用选项

–version 或者 -v

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

$ node -v v6.10.0 –eval 或者 -e

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

$节点-e '的console.log(3 + 2)' 5 –print 或者 -p

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

$ node -p’3 + 2’ 5 –check 或者-c

节点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) ^ 语法错误:缺少)参数列表后
在Object.exports.runInThisContext(vm.js:76:16) 在Module._compile(module.js:542:28) 在Object.Module._extensions…js(module.js:579:10) 在Module.load(module.js:487:32) 在tryModuleLoad(module.js:446:12) 在Function.Module._load(module.js:438:3) 在Module.runMain(module.js:604:10) 在运行(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) ^ 语法错误:缺少)参数列表后
在启动时(bootstrap_node.js:144:11) 在bootstrap_node.js:509:3 –inspect[=host:port]

节点v6.3.0之后才有

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

–inspect-brk[=host:port]

节点v7.6.0之后才有

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

$ node --inspect-brk index.js 侦听端口9229。
警告:这是一个实验性功能,可随时更改。
要开始调试,请在 Chrome 中打开以下URL :
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

节点v6.0.0之后才有

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

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

另外,下面这些缓冲区构造器在节点v6.0.0已经弃用了。

另请注意,一些缓冲区构造函数已被弃用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选项执行代码:

节点–prof index.js 运行之后,工作目录中将生成一个新文件,前缀为isolate-。

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

节点–prof-process isolation-0x102001600-v8.log> output.txt output.txt文件中有V8引擎的性能记录信息,比如:C ++代码花了多少时间,JavaScript代码花了多少时间,那个函数调用花了最多时间。

[C ++]: 刻录总共nonlib名称 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 *) [概要]: 刻录总共nonlib名称 1 1.1%1.1%JavaScript 70 80.5%80.5%C ++ 5 5.7%5.7%GC 0 0.0%共享库 16 18.4%未计数 访问官方文档,可以查看节点命令的所有选项。

V8引擎选项

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

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

–harmony

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

–max_old_space_size

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

–optimize_for_size

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

环境变量

NODE_DEBUG=module[,…]

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

$ NODE_DEBUG =模块节点index.js 输出如下(可知,模块模块负责加载代码调用的各个模块):

MODULE 7595:在[“/Users/gergelyke/.node_modules","/Users/gergelyke/.node_libraries",Users”中查找“/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js” /gergelyke/.nvm/versions/node/v6.10.0/lib/node“]
MODULE 7595:为模块“”加载“/Users/gergelyke/Development/risingstack/mastering-nodejs-cli/index.js”。 NODE_PATH=path

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

OPENSSL_CONF=file

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

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

欢迎加入我们Fundebug的Node.js技术交流群:177654062。

nodejs-qq-group.jpeg

版权声明: 转载时请注明作者Fundebug以及本文地址:https : //blog.fundebug.com/2017/04/26/node-command-option/

回到顶部