Nodejs 定制化你自己的REPL

Node 官方提供了 repl 模块,实现一个交互式解析器,它可以作为一个独立程序使用或者嵌入到其它应用中:

node 命令使用

如果你已经安装了 node,那么你可以在命令行直接输入 node 命令便可以进入一个交互式 javascript 命令行界面,这里你可以敲一些 javascript 表达式,甚至你都可以把它当成计算器使用:

$ node
> new Date()
2018-12-06T03:30:46.242Z
> 3 + 5
8
>

在交互式命令行中当你输入 .help 命令,你会发现它提供了几个简单且方便的交互命令:

> .help
.break    Sometimes you get stuck, this gets you out
.clear    Alias for .break
.editor   Enter editor mode
.exit     Exit the repl
.help     Print this help message
.load     Load JS from a file into the REPL session
.save     Save all evaluated commands in this REPL session to a file
>

  • .break: 在输入一个多行表达式的过程中,输入 .break 命令(或按下 -C 组合键)将终止表达式的继续输入。
  • .clear: 重置 REPL 的 context 为一个空对象,并清除当前正输入的所有多行表达式。
  • .exit: 关闭输入输出流,退出 REPL。
  • .help: 显示特定命令的帮助列表。
  • .save: 保存当前 REPL 会话到一个文件: > .save ./file/to/save.js
  • .load: 读取一个文件到当前 REPL 会话。 > .load ./file/to/load.js
  • .editor: 进入编辑模式(-D 完成,-C 取消)

在交互式命令中,我们也可以使用如下组合键:

  • -C:当按下一次时,与 .break 命令的效果一样,当在空白行按下两次时,与 .exit 命令的效果一样;
  • -D: 与 .exit 命令的效果一样;
  • :当在空白行按下时,显示全局和本地作用域内的变量,当在输入时按下,显示相关的自动补全选项;

如果你想要在交互式命令里获取上一条命令的执行结果,可以直接输入“_”:

> 3 + 3
6
> _
6
定制自己的 node repl

如果你觉得官方的 node 命令行还不能满足你的需求,你可以使用repl模块来定制化你自己的交互式命令行,repl 模块提供了一个 start 函数,可以创建并启动一个 repl 实例。

比如我们在使用官方的 repl 时,想要使用 lodash 里面的函数,每次总要把写一行代码 _ = require(‘lodash’),非常麻烦,这个时候我们就可以定制自己的 repl,每次启动时绑定一些全局变量到 context 上,repl.start 函数返回一个 REPLServer 类的实例,该实例上面有一个 context 属性,用于存放当前 repl 的全局变量,我们在启动时给把一些常用模块加载到这个 context 上,便可以方便的解决该问题。代码如下:

#!/usr/bin/env node

const repl = require('repl');
//用于制定命令行提示符
let r = repl.start('<node>');

Object.assign(r.context, {
    lodash: require('lodash'),
    moment: require('moment')
})

start函数还提供了许多其它有用的选项,比如定制你的输入,输出的来源等功能,详细可以看 node 官方文档

参考文献
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js的服务是指将Node.js应用程序转变为可供其他应用或系统使用的服务的过程。服务可以通过将Node.js应用程序封装为模块来实现。在Node.js中,功能块通常以模块的形式存在,可以通过统一入口文件index.js来调用不同的模块来完成所需功能。 要将Node.js应用程序服务,可以将server.js文件转换为一个模块,以便让index.js主文件使用。可以通过以下步骤实现: 1. 在server.js文件中,使用exports关键字将需要暴露的功能或变量导出,例如:exports.functionName = functionName; 2. 在index.js文件中,使用require()函数导入server.js模块,例如:const serverModule = require('./server.js'); 3. 然后可以使用serverModule中暴露的功能或变量,例如:serverModule.functionName(); 这样,就可以将Node.js应用程序服务,并可以在其他文件中轻松使用该模块提供的功能。 另外,还可以通过Node.js模块服务器,使用一个名为socle.js的基础文件来实现服务。socle.js文件需要加载loadall.js,并开始监听文件的变,以实现自动重新加载任何更改。 总结起来,通过将Node.js应用程序封装为模块,并在需要的地方进行导入和使用,可以实现Node.js的服务。这样,其他应用或系统可以方便地使用Node.js应用程序提供的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [轻松创建nodejs服务器(3):代码模块](https://download.csdn.net/download/weixin_38502814/14875607)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [SOCLE:nodejs 模块服务器](https://download.csdn.net/download/weixin_42128963/19655160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [NodeJS 之模块](https://blog.csdn.net/qq_44879989/article/details/128748824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值