当测试Node应用或模块时,不需要在文件中输入JS代码,也不需要在Node中运行,Node为我们提供了一个交互模块:交互式编程环境(REPL)
1.命令行中直接输入node即可打开REPL。输入内容由V8引擎处理。
2._可以获得上一个表达式的值。
3.赋值表达式在赋值时不会返回。(即只返回undefined)
4.在REPL中可以快速、轻易地查看一个对象的接口。
5.REPL命令的完整列表。
- .break 结束多行输入,已输入的也会丢失。
- .clear 重启上下文对象,清空所有多行表达式。重新开始。
- .exit 退出REPL。
- .help 显示所有REPL命令。
- .save 将当前会话内容保存到文件中。
- .load 在当前会话中加载文件(.load /path/to/file.js)。
4.1 创建自定义REPL
1.创建repl的参数:
- prompt 默认是>。
- input 可读流,默认是process.stdin。
- output 可写流,默认是process.stdout。
- eval 默认是eval的异步封装。
- useGlobal 表示是使用global对象还是一个新的上下文,默认为false。
- useColors 表示writer函数是否使用颜色,默认为terminal颜色。
- ignoreUndefined 是否忽略undefined结果,默认false。
- terminal 设置为true时,stream被当成来自terminal的输入(tty)来处理。
- writer 计算每个命令,并返回格式化后的结果,默认会调用util.inspect()。
- replMode REPL运行时的模式:严格(strict),默认(default),混合(hybrid)。
const repl=require('repl')//引入REPL模块
const context=repl.start({
prompt:'zdw$',
ignoreUndefined:true,
}).context
context.request=require('request')//加载第三方模块并赋值给REPL属性context
4.2 控制台console
终1.console.log()会把结果输出到stdout,通常是终端。
2.console.error()会把结果输出到stderr。
3.console是Console类的一个全局化实例。我们可以通过这个类自定义控制台。
const Console=require('console').Console
//两种创建方式
const myCon=new Console(process.stdout,process.stderr)
const myCon2=new console.Console(process.stdout,process.stderr)
myCon.log('myCon')
myCon2.error('myCon2')
4.process.stdout和process.stderror是同步的,所以通常会被阻塞。只有当流指向管道(pipe)时才是异步。
5.当在流中注入大量数据时,console对象会阻塞console.log()和console.error()。
6.给Console类传递process.stdout和process.stderr这两个参数,可以实现和全局console对象一样的功能。
- 也可以传入不同的流参数,把内容输出到不同的流中。
7.Console的对象接收到的数据内容如果是对象,那么只会打印2级嵌套。
- 如需打印更多嵌套需要调用JSON.stringify()。
- 可以使用util.format()和util.inspect()来格式化数据。