什么节点模块提供CLI提示符?

时间:2015-05-20 17:49:20

标签: node.js npm prompt read-eval-print-loop

我一直在寻找一个节点模块,为Node应用程序提供类似REPL的CLI提示界面。

我正在寻找的是inquirerpromptcommander之间的混合。

节点提供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模块处理这个问题?

9个月后更新

由于无法满足我的需求,我最终构建并发布了Vorpal,这是一个在Node中构建交互式CLI的框架。

3 个答案:

答案 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启发式路由和其他类似功能。

  • 在shell模式和命令模式下运行
  • 控制台应用程序的一等公民(箭头,ctrl-a,ctrl-u,...)
  • 用户友好的历史记录,帮助信息和许多其他插件
  • 构建和构建基于复杂的应用程序的基础
  • 快速路由
  • 中的命令匹配,参数和高级功能
  • 基于中间件的灵活架构,用于插件创建和路由增强
  • 熟悉我们这些使用Connect或Express的API
  • 通过Redis,HTTP服务器,Cloud9,CoffeeScript等插件的预测命令......

您可以在主页上找到基本的reddis客户端示例,其中包含命令完成和历史记录。

答案 2 :(得分:0)

听起来你实际上正在寻找为repl模块提供动力的readline模块。