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给你的瑞士军刀:
- 快速测试代码片段
- 调试函数逻辑
- 学习新API
- 实验新特性
不用创建文件,不用运行程序,即敲即用。下次想验证一个想法,直接 node 进REPL,效率拉满!
下节课我们聊聊怎么运行JS文件和更高级的调试技巧。
有问题评论区见!