我一直在寻找一个节点模块,为Node应用程序提供类似REPL的CLI提示界面。
我正在寻找的是inquirer或prompt与commander之间的混合。
节点提供built-in REPL module,但这只是暴露了应用程序的原始javascript。我想为应用程序构建一个虚拟接口。
示例,假设您运行node server.js
,您会收到提示:
server:~$
这将在您自己的虚拟上下文中表现为基本的unix提示符。按enter
:
server:~$
server:~$
或help
:
server:~$ help
Commands:
debug [setting] Enables or disables debugging.
show stats Displays live stats for your web server.
server:~$
您可以执行自定义命令:
server:~$ debug on -v 7
Debugging turned on with a verbosity of 7
... live logging ...
知道什么是NPM模块处理这个问题?
由于无法满足我的需求,我最终构建并发布了Vorpal,这是一个在Node中构建交互式CLI的框架。
答案 0 :(得分:4)
您可以使用标准REPL模块并插入自定义命令评估程序。 “重复命令的向上箭头”等已经出现在repl模块中,因此您无需担心这一点。
例如,这是一个疯狂实施的评估器,可以完成你在问题中描述的事情:
var repl = require("repl");
var cmds = {
"help" : function(input, context) {
return "debug [setting] Enables or disables debugging..."
},
"debug" : function(input, context) {
var args = input.split(/\s+/).slice(1);
var onoff = args[0];
var verbosity = args[2];
return "Debugging turned " + onoff + " with a verbosity of " + verbosity;
},
"exit": function(input, context) {
process.exit();
},
"default" : function(input, context) {
return "Command not understood";
}
};
function eval(input, context, filename, callback) {
var cmd = input.split(/\s+/)[0];
var result = (cmds[cmd] || cmds["default"])(input, context);
callback(null, result);
}
repl.start({
prompt: "server:~$ ",
eval: eval
});
请注意,此处演示的重点是如何实现自定义REPL;有明显更好的方法来实现评估器而不是空格分割和函数哈希,但是如何实现命令评估器取决于你的应用程序应该做什么
答案 1 :(得分:1)
有node-shell可用,另请参阅home page。
主页上的功能是:
Shell为基于控制台的应用程序带来了一个受Connect启发的API,Express启发式路由和其他类似功能。
您可以在主页上找到基本的reddis客户端示例,其中包含命令完成和历史记录。
答案 2 :(得分:0)
听起来你实际上正在寻找为repl
模块提供动力的readline
模块。