我们正在尝试使用node.js创建命令行实用程序 我们需要创建类似geth的工具,例如用户将使用一个命令启动该工具,这将打开其自己的终端,我们可以在其中执行子命令。 我们需要创建自己的嵌套终端的原因是,我们需要在一个命令中初始化几个变量,并且应该能够在第二个命令中检索它们,依此类推...
我们有几个问题 1)node.js适合吗? ,我们尝试使用commander,但它创建命令,但不维护会话' 2)我们尝试了inquirer + commander + node-cmd,但它也有问题
这可能是我们的方法错误,有人可以指导我们解决这个问题吗?对此方向的任何投入都将受到高度赞赏
答案 0 :(得分:0)
您从错误的角度解决了问题。 commander
或node-cmd
允许您在节点程序中运行Shell命令。您需要的是实际实现外壳。
您的起点应该是readline模块,该模块可以让您处理stdin
数据。这个简单的示例显示了如何创建一个处理2个命令的外壳:hello
和exit
:
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
启发的