教程文档【免费下载链接】jstutorialJavascript tutorial book项目地址https://gitcode.com/gh_mirrors/js/jstutorial点击查看免费下载本文整理自 jstutorialJavaScript 标准参考教程Node.js 章节的《repl》文档并对照同章节的《Node.js 概述》等资料做了补充。读完本文你将掌握两种 REPL 用法一是直接在命令行运行node进入交互式环境用来快速验证表达式、调试模块二是通过内置的repl模块在自己的 Node 程序内部嵌入一个可交互的 REPL 会话并通过context对象向会话注入自定义变量。所有命令与代码示例均可直接复制运行。REPL 环境是什么REPL 是 Read-Eval-Print Loop 的缩写中文可译为读取-求值-输出循环见 Node.js 概述。REPL 环境是一个互动式的 Node 命令解释环境用户从键盘输入命令环境读取Read后立刻求值Eval再把结果输出Print到屏幕然后回到循环Loop等待下一条输入。$ node 11 2 在 Node.js 概述 一节中这种用法被描述为在命令行键入 node 命令后面没有文件名就进入一个 Node.js 的 REPL 环境。REPL 的典型用途包括快速验证一段 JavaScript 语法或表达式无需新建脚本文件即时调用 Node 内置模块的 API探索其行为在调试阶段与运行中的程序交互。进入与退出 REPL 环境进入 REPL直接执行node命令不带任何脚本文件名就能进入 REPL 环境$ node 大于号就是 REPL 环境的提示符prompt。在这里可以直接输入 JavaScript 代码回车后立刻得到结果$ node 1 1 2 以严格模式进入如果希望 REPL 在严格模式下运行可以使用--use_strict参数参见 Node.js 概述$ node --use_strict退出 REPL退出 REPL 环境有两种方式在行首按下Ctrl D输入点命令.exit。$ node .exit $遍历历史命令REPL 是 Node.js 与用户互动的 shell各种基本的 shell 功能都可以在里面使用比如使用上下方向键遍历曾经使用过的命令参见 Node.js 概述。表达式与语句的区别在 REPL 中输入一个表达式会直接返回结果因为表达式有返回值输入一条语句则没有任何输出因为语句没有返回值。 x 1 1 var x 1 上面代码中第二条命令var x 1没有显示任何结果因为它是一条语句而不是表达式。这是 REPL 新手最容易困惑的一个行为值得记住想在 REPL 里看到结果就输入表达式而不是语句。自动加载内置模块REPL 环境的一个显著特点是自动加载 Node 的所有内置模块。也就是说不需要先执行require()就可以直接使用模块名调用 API。举例来说如果要执行require(os).arch()在 REPL 里可以直接输入os.arch() os.arch() x64这一特性让 REPL 非常适合快速探查 Node 内置模块os、path、fs、http等的接口。当然对于非内置模块或自定义模块仍然需要显式使用require()加载有关require的加载规则可以参阅 CommonJS 规范。另外需要留意的是 REPL 中全局变量的行为在模块文件中var x 1声明的变量是模块私有的不会成为global对象的属性但 REPL 环境的行为与浏览器一致var x 1等同于设置全局属性参见 Node.js 概述。命令历史~/.node_repl_historyREPL 环境执行的所有命令都保存在~/.node_repl_history文件之中。这样退出后重新进入 REPL依然可以通过方向键翻出之前输入过的命令。如果想停止写入历史文件可以将环境变量NODE_REPL_HISTORY设为空字符串$ NODE_REPL_HISTORY node在命令行中环境变量设置在node之前只对本次启动的 REPL 会话生效。对应地Node 还支持NODE_REPL_HISTORY_SIZE环境变量来限制写入历史文件的命令条数防止文件无限增长。_变量上一个表达式的执行结果在 REPL 环境里下划线_是一个特殊变量保存的是上一个表达式的执行结果。 2 3 5 _ 5它还可以继续参与运算 1 1 2 _ 1 3上面的写法_ 1在 Node.js 概述 中也有演示。利用_可以在不重新输入整个表达式的情况下基于上一次的结果做增量计算。点命令dot commands以句点开头的命令称为点命令是 REPL 环境提供的会话级指令用于管理当前会话。.exit.exit命令用于退出 REPL 环境效果与在行首按下Ctrl D相同$ node .exit $.load在 REPL 之中输入.load someFile.js会执行当前目录下的脚本文件常用来预先加载并设置一批常量或工具函数 .load config.js执行后脚本中通过赋值或声明产生的变量即可在本次会话中继续使用适合把常用的配置值、测试数据一次性载入交互环境。其他常用点命令除了文档中介绍的.exit和.loadNode 的 REPL 还提供了一组标准的会话命令在提示符后输入.help可以随时查看完整列表。常见的有命令作用.help显示所有可用的点命令列表.save file把当前会话输入过的命令保存到指定文件.clear重置 REPL 的上下文清空context中注入的自定义变量.editor进入多行编辑器模式方便编写较长的代码块.break终止当前多行输入回到提示符状态repl 模块在程序内提供 REPL 环境repl模块用于在程序内部提供一个 REPL 在线环境。这在很多场景下非常有用例如为服务器程序提供一个运行时管理控制台开发阶段把应用内部状态暴露为可交互调试入口构建 CLI 工具时让用户与程序实时对话。基本用法repl.start()repl模块的核心方法是repl.start()。下面是最简单的用法原文档示例var repl require(repl); function a(i) { var context repl.start(repl ).context; context.pi 3.14; context.arg i; } a(3)运行这段代码后程序会进入一个提示符为repl的 REPL 会话context对象中注入的pi和arg属性都可以在 REPL 环境内直接读取// repl pi // 3.14 // repl arg // 3 // repl代码的关键点有两个repl.start()的返回值是 REPLServer 实例。repl.start(repl )这种写法是把字符串参数直接作为提示符prompt。REPLServer 实例的context属性就是这个 REPL 会话的全局上下文对象。给它添加属性如context.pi 3.14等同于在 REPL 环境里声明全局变量反过来在 REPL 里执行的赋值也会反映到context上。这正是在程序与交互会话之间共享状态的桥梁。repl.start() 的可选参数除了直接传入字符串作为提示符repl.start()更完整的用法是传入一个选项对象repl.start({ prompt: node , // 提示符默认是 input: process.stdin, // 输入流默认是 process.stdin output: process.stdout, // 输出流默认是 process.stdout terminal: true, // 是否为终端会话true 时启用方向键历史、Tab 补全等交互能力 useGlobal: false, // 是否使用 global 对象作为上下文默认 false使用独立的 context ignoreUndefined: false, // 表达式结果为 undefined 时是否仍输出 eval: null, // 自定义求值函数可以接管每条命令的解析与执行 writer: null // 自定义结果格式化函数控制求值结果的输出形式 });其中prompt参数对应原文档repl.start方法还可以通过参数定制提示符的说明。通过input/output参数还可以把 REPL 挂接到任意可读流 / 可写流上例如在 Socket 连接上提供远程调试控制台通过eval参数则可以自定义命令的解释执行逻辑实现语法增强或 DSL。在 REPL 中加载模块repl模块提供的环境与命令行 REPL 一样会预加载 Node 的内置模块因此可以直接使用os.arch()、path.join()这类调用。需要加载自定义模块时在会话中执行require(./my-module)即可加载规则与普通脚本一致参见 CommonJS 规范。小结命令行 REPL直接运行node进入为提示符Ctrl D或.exit退出内置模块自动加载_保存上一个表达式的结果.load可执行脚本文件命令历史持久化在~/.node_repl_history可用NODE_REPL_HISTORY环境变量关闭。repl 模块通过repl.start()在程序内启动 REPL 会话返回的实例的context属性用于向会话注入和读取全局变量是程序与交互环境通信的枢纽。无论是要快速验证一段代码、调试某个模块的行为还是为自己的应用搭建一个运行时交互入口REPL 都是 Node.js 开发中值得熟练掌握的基础工具。与 REPL 相关的更多 Node 基础知识如模块加载、全局对象、--use_strict严格模式可以继续阅读仓库中的 Node.js 概述 与 CommonJS 规范。赞分享教程文档【免费下载链接】jstutorialJavascript tutorial book项目地址https://gitcode.com/gh_mirrors/js/jstutorial点击查看免费下载相关推荐PhoneGap Facebook Plugin 核心 API 详解从登录到 Graph 调用的完整流程PhoneGap Facebook Plugin 核心 API 详解从登录到 Graph 调用的完整流程 PhoneGap Facebook Plugin 是移动开发Porffor REPL实现交互式环境构建Porffor REPL实现交互式环境构建 还在为JavaScript代码调试而烦恼Porffor REPL为你提供即时编译体验让代码测试变得简单高效读编译器语言运行时开发工具EdgeDB REPL 交互式查询环境使用指南EdgeDB REPL 交互式查询环境使用指南 什么是 EdgeDB REPL EdgeDB REPL Read Eval Print Loop 是一个强大的交数据库图数据库关系型数据库上一篇HunterPie为《怪物猎人世界》量身打造的全能游戏助手下一篇如何为Honey Select 2安装完整汉化与去码补丁面向新手的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考