使用了Node.js有相当长的时间了。一直都是用到什么去看什么,零零散散的,毫无系统条理,碎片化的知识结构导致我的大脑存储也时常out fo memory。So, Let’s begin from Zero。
从零开始,自然是从从nodejs官方文档开始。但是官方文档的api是A-Z的,你背单词从A开始可以。
写程序可不是从A开始写的。
我们都是从零开始的。
第一步自然是让我们和Nodejs开始互动起来,有了交流,才能深入浅出嘛。
所以REPL是第一步。
REPL
意即Read-Eval-Print Loop
Demo 0:
1 | $ node |
Special keys
⌃D to finish
⌃C to cancel
Commonds
.exit
exit REPL
.editor
editor mdoe
.clear
reset REPL context, will emit ‘reset’ event
.help
show the commonds list
.save
save the current REPL session to a file: > .save ./file/to/save.js
.load
load a file into the current REPL session: > .load ./file/to/load.js
Default Evaluation
支持js表达式输入
global scope & local scope // 这里要有一个context的概念,通常译为执行上下文
创建一个repl_test.js的文件,写入下面的内容
1 | const repl = require('repl') |
然后在终端里运行
1 | $ node repl_test.js |
成功在当前的REPL中获取到了变量m
通过这个demo,我们可以得知context的属性默认是可读写。可以通过Object.defineProperty()
来限制只读。
访问Node.js核心模块, 例如fs
指定变量_
, 这个_
默认把最近一次的输入值赋给_
,除非明确设置了_
Custom Evaluation Functions 自定义配置
prompt,translator配置
Recoverable Errors这点主要是为了支持多行输入。(略过)
在repl中回车的时候都是默认输入当前行的内容到eval
函数,为了支持多行输入,返回的repl.Recoverable
实例会提供回调
Customizing REPL Output 自定义输出(略过)
Class:REPLServer
repl类的服务有
exit
,reset
两种事件。
都可以监听,并且在里面搞点事情。下面的例子是在.exit
和.clear
时触发
1 | // demo3 |
replServer.defineCommand(keyword, cmd) 自定义命令。
1 | // demo4 |
通过.sayhello maintobest
, .saybye
可执行
replServer.displayPrompt([preserveCursor]) 主要用于自定义命令中,效果是打印出ouput里的内容,恢复input