Node.js中的REPL代表了一个计算机环境,类似于Window系统的终端或者Unix/Linux的shell。我们可以在终端中输入命令并接收系统的响应。Node带有一个交互式解释器,可以执行以下任务:Node带有一个交互式解释器,可以执行以下任务:读取:读取用户输入,解析输入的Javascript数据结构并将其存储在内存中。执行:执行输入数据结构。打印:输出结果。循环:循环执行上述步骤,直到用户按两次Ctrl-c按钮退出。repl模块介绍repl模块提供了一个“读取-求值-打印”循环的实现,可以作为独立程序使用,也可以嵌入到其他应用程序中。repl模块的引入如下:constrepl=require('repl');repl模块导出repl.REPLServer类。当repl.REPLServer实例运行时,它接收用户输入的每一行,并根据用户定义的函数对其进行解释。解释输入并输出结果。输入可以是标准输入,输出可以是标准输出,也可以连接到任何其他Node.js流。repl.REPLServer实例支持自动完成输入、细Emacs风格的行编辑、多行输入、ANSI风格的输出、保存和恢复当前REPL会话的状态、纠错和可定制的解释功能。命令和特殊键REPL的所有实例都支持以下特殊命令:.break:在输入多行表达式期间,输入.break命令将终止继续输入表达式。.clear:将REPL上下文重置为空对象并清除当前输入的所有多行表达式。.exit:关闭输入输出流,退出REPL。.help:显示特定命令的帮助列表。.save:将当前REPL会话保存到文件中。.load:将文件读入当前REPL会话。.editor:进入编辑模式(-D完成,-C取消)。REPL中的以下组合键具有特殊效果:-C:按下一次时,与.break命令具有相同的效果。在空白行上按两次时与.exit命令的效果相同。-D:与.exit命令效果相同。:在空白行上按下时,显示全局和局部范围内的变量。在键入时按下时,显示关联的自动完成选项。简单的表达式运算我们可以在Node.jsREPL的命令行窗口中执行简单的数学运算。例子:比如在命令窗口输入node命令,按回车键在里面进行数学运算:$node>1+23>10-(5*2)+33自己试试吧,比较简单,所以这里就不渲染了。在REPL的命令行窗口中使用变量来声明变量,需要使用var关键字。如果不使用var关键字,则直接打印。如果要输出变量的值,可以使用console.log()方法。示例:$node>vara=1undefined>a=11>console.log(a)1undefined默认解释器将最后解释的表达式的结果分配给变量_(下划线)。将_显式设置为一个值会禁用此功能。$node>55>_+611>1+12>_2多行表达式使用NodeREPL支持输入多行表达式。例子$node>a=1>if(a=1){...console.log(a)...}1undefined以上代码中三个点的符号是系统自动生成的,如果需要换行,直接回车即可,Node会自动检测是否为连续表达式。REPLServer类exit事件中事件的使用当REPL在收到.exit命令时退出,或者按两次-C发出SIGINT信号,或者发出'end'信号-D,触发“退出”事件。不带任何参数调用监听器的回调函数。replServer.on('exit',()=>{console.log('exitevent');process.exit();});reset事件当REPL上下文被重置时,'reset'事件被触发。每当收到.clear命令时都会触发此事件,除非REPL使用默认解释器并且在创建repl.REPLServer实例时将useGlobal选项设置为true。将使用上下文对象作为唯一参数调用侦听器的回调函数。varrepl=require('repl');functioninitializeContext(context){context.x='test';}varr=repl.start({prompt:'>'});initializeContext(r.context);r.on('重置',initializeContext);执行代码时,可以修改全局'x'变量,但随后的.clear命令会将其重置回初始值:>nodetest.js>x'test'>x=55>x5>.clearClearingcontext...>x'测试'