Node.js REPL交互环境

REPL是个啥?Read-Eval-Print Loop,听着高大上其实就是"读取-求值-输出"循环。简单说就是一个即时交互环境,你敲一行代码,它就立即给你结果。这玩意儿太方便了,写个小测试、调试个函数分分钟搞定。

一、 启动REPL

在终端输入 node 然后回车,就进入了REPL模式:

$ node

看到那个 > 符号了吗?那就是在等你输入代码。

二、 基础操作

1. 算术运算

直接敲数学公式:

1 + 2 3 10 5 50 (3 + 5) 2 16

2. 变量

可以定义变量:

let name = '小明' undefined name '小明' const age = 18 undefined age 18

注意:变量赋值后返回undefined,这是正常的,因为赋值表达式本身没有返回值。

3. 多行代码

写多行代码时,REPL会自动换行:

function greet(name) { ... return '你好,' + name; ... } undefined greet('小红') '你好,小红'

看到三个点 ... 了吗?那就是REPL在等你继续输入。

4. 字符串操作

'hello'.toUpperCase() 'HELLO' 'Node.js'.length 8 'hello world'.split(' ') [ 'hello', 'world' ]

5. 对象和数组

let user = { name: '小明', age: 18 } undefined user.name '小明' user.age 18 let arr = [1, 2, 3, 4, 5] undefined arr.map(x => x * 2) [ 2, 4, 6, 8, 10 ]

三、 REPL内置命令

REPL里有一些特殊命令,都以 . 开头:

.help - 帮助

.help .break 退出多行输入 .clear 清除上下文(相当于新建一个) .exit 退出REPL .help 显示帮助 .save 保存当前会话到文件 .load 加载文件到当前会话 .editor 进入编辑器模式

.editor - 编辑器模式

这个好用!输入 .editor 进入多行编辑模式:

.editor // 进入编辑模式,可以写多行代码 function add(a, b) { return a + b; }

// 按 Ctrl+D 保存并执行

.save 和 .load - 保存加载

可以把当前REPL里的代码保存下来:

let count = 0; count++; .save mycode.js

下次想用的时候:

.load mycode.js

.clear - 清除

.clear 这样会清除所有变量,重新开始。

四、 实用技巧

1. 下划线获取上一个结果

1 + 2 3 _ * 2 6

_ 表示上一个表达式的返回值。

2. Tab键自动补全

敲代码时按Tab键,REPL会尝试补全:

con console

如果是唯一匹配的直接补全,如果有多个会显示列表。

3. 查看对象所有属性

let obj = { a: 1, b: 2 } obj. obj.a obj.b

4. 调试模块

直接测试模块功能:

const fs = require('fs') fs.readdirSync('.') [ 'node_modules', 'package.json', 'app.js' ]

const path = require('path') path.join(__dirname, 'views') '/Users/xiaoming/project/views'

五、 实战演练

场景1:测试数组方法

let numbers = [1, 2, 3, 4, 5] numbers.filter(x => x > 2) [ 3, 4, 5 ] numbers.map(x => x ** 2) [ 1, 4, 9, 16, 25 ] numbers.reduce((a, b) => a + b, 0) 15

场景2:测试正则

let reg = /\d+/g 'abc123def456'.match(reg) [ '123', '456' ]

'hello'.replace(/l/g, 'L') 'heLLo'

场景3:测试Promise

new Promise((resolve, reject) => { ... setTimeout(() => resolve('完成'), 1000) ... }) Promise { }

Promise.resolve(100).then(x => x 2) Promise { } await Promise.resolve(100).then(x => x 2) 200

等等,这个需要async函数包裹,或者直接用:

Promise.resolve('hello').then(x => console.log(x)) hello undefined

场景4:测试async/await

(async () => { ... const result = await new Promise(r => setTimeout(() => r(42), 100)); ... console.log(result); ... })() 42 undefined

六、 Node -e 直接执行代码

不想进入REPL?可以直接用 -e 参数执行代码:

node -e "console.log('Hello World')"

这在写脚本的时候特别有用:

// 打印当前目录下所有文件 node -e "console.log(require('fs').readdirSync('.'))"

// 计算 node -e "console.log(Array.from({length: 5}, (_, i) => i * 2))"

七、 常见问题

1. 怎么退出?

按 Ctrl+C 两次,或者直接输入 .exit

2. 中文乱码?

设置环境变量:

NODE_OPTIONS="--input-type=module" node

或者在Windows上:

chcp 65001 node

3. 多行输入取消

按 Ctrl+C 一次,取消当前多行输入,回到 > 状态。

4. REPL卡住了?

可能是代码里有死循环,按 Ctrl+C 强行中断。

八、 总结

REPL就是Node.js给你的瑞士军刀:

不用创建文件,不用运行程序,即敲即用。下次想验证一个想法,直接 node 进REPL,效率拉满!

下节课我们聊聊怎么运行JS文件和更高级的调试技巧。

有问题评论区见!