Nodejs库/模块用于开发交互式CLI应用程序?

时间:2012-10-17 08:08:10

标签: node.js command-line-interface interactive

一直在谷歌搜索并搜索stackoverflow,但我没有遇到任何事情。我想用节点开发一个交互式shell,并想知道最好的方法。是否有人可以推荐使用的图书馆?

我已经编写了一个库,现在想要一个CLI接口与它进行交互,有两种方法:使用参数运行应用程序,或者通过交互式shell。 e.g。

$ node myapp doSomething
App Result: I did something
$ node myapp cli
Entering interactive mode...
myapp>
myapp> doSomething
App Result: I did something
myapp>

有什么建议吗?

4 个答案:

答案 0 :(得分:13)

答案 1 :(得分:5)

Vorpal是一个完全针对问题所描述内容的框架,尽管他们称之为“immersive cli'。

var vorpal = require('vorpal')();

vorpal
  .command('doSomething')
  .action(function (args, cb){
    this.log('App Result: I did something');
    cb();
  });

vorpal
  .delimiter('myapp>')
  .show();

答案 2 :(得分:3)

我最近开始了一个增强的REPL项目,它提供了插件和多语言支持(如CoffeeScript):

http://danielgtaylor.github.com/nesh/

在构建交互式应用时,它可能对您有用。如果您想在Nesh中看到任何功能,请告诉我们。

答案 3 :(得分:0)

这个问题有点陈旧,但是我已经为我之前构建的模块提供了一些里程,它将启动一个类似交互式shell的命令提示符:

https://github.com/mrvisser/node-readcommand

与commander这样的关键区别在于它允许你维护shell会话状态并在Node.js内部接受命令,而不是要求每次调用都是一个无状态的重新运行shell'解析的参数。它有效地包装节点的内部readline模块以提供:

  • 类似于shell的解析输入
  • 通过转义新行或引用新行来支持多行命令
  • 命令历史记录支持(使用readcommand.loop时)
  • 基于参数的自动完成(包含readline基于文本的自动完成支持

希望其他人发现它也很有用。

对于更高级和自以为是的交互式CLI框架,我还构建了node-corporalhttps://github.com/mrvisser/node-corporal。这可能比您正在寻找的更多,但它提供了一个结合CLI应用程序的结构和环境。