使用nodejs创建命令行实用程序所需的输入

时间:2018-10-29 14:19:19

标签: javascript node.js shell command-line command

我们正在尝试使用node.js创建命令行实用程序 我们需要创建类似geth的工具,例如用户将使用一个命令启动该工具,这将打开其自己的终端,我们可以在其中执行子命令。 我们需要创建自己的嵌套终端的原因是,我们需要在一个命令中初始化几个变量,并且应该能够在第二个命令中检索它们,依此类推...

我们有几个问题 1)node.js适合吗? ,我们尝试使用commander,但它创建命令,但不维护会话' 2)我们尝试了inquirer + commander + node-cmd,但它也有问题

这可能是我们的方法错误,有人可以指导我们解决这个问题吗?对此方向的任何投入都将受到高度赞赏

2 个答案:

答案 0 :(得分:0)

您从错误的角度解决了问题。 commandernode-cmd允许您在节点程序中运行Shell命令。您需要的是实际实现外壳。

您的起点应该是readline模块,该模块可以让您处理stdin数据。这个简单的示例显示了如何创建一个处理2个命令的外壳:helloexit

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('> ', (answer) => {
  if (answer == "hello") {
    console.log("world");
  }

  if (answer == "exit") {
    rl.close();
  }
});

答案 1 :(得分:0)

“ node.js适合吗?”
当然可以,为什么不呢?您可以使用Node.js

做任何您想做的事情

显然,您可以从头开始创建它,但是有一些不错的库可以帮助您完成此任务。您已经尝试了其中一些。

过时了,我会尝试Vorpal制作一个cli应用程序:

const vorpal = require('vorpal')();

let variables = {};

vorpal
  .command('init', 'Initialise few variables.')
  .action(function() {
    return this.prompt({
      name: 'etherum_password',
      message: 'Please enter your etherum wallet password: '
    }, (result) => {
      variables = result
    })
  });

vorpal
  .command('pswd', 'Show etherum wallet password.')
  .action(function() {
    if (variables.etherum_password)
      this.log(variables.etherum_password)
    else this.log('Please run \'init\' command before.');
  });

vorpal
  .delimiter('$')
  .show();

请注意,prompt方法是直接受 Inquirer.js

启发的