Мы пытаемся создать утилиту командной строки, используя node.js. Нам нужно создать что-то вроде утилиты geth, например, user запустит утилиту одной командой, которая откроет собственный терминал, где мы можем выполнять подкоманды. Причина, по которой нам нужно создать наш собственный вложенный терминал, заключается в том, что нам нужно инициализировать несколько переменных в одной команде и иметь возможность извлекать их во второй и так далее...
поэтому у нас есть несколько вопросов: 1) Подходит ли для этого node.js? Мы пытались использовать командир, но он создает команды, не поддерживают сеанс "2) мы попытались дознавателем + полководца + узлового-CMD, но это также дают проблемам.
Может быть, наш подход здесь неправильный, и кто-то может направить нас к этому? Любые вклады в этом направлении высоко ценятся.
"Для этого подходит node.js?"
Конечно, почему бы и нет? Вы можете делать все, что хотите, с помощью Node.js
Очевидно, вы можете создать его с нуля, но есть некоторые хорошие библиотеки, которые могут помочь вам в этой задаче. Вы уже пробовали некоторые из них.
Personnaly, я попробую 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();
Обратите внимание, что метод подсказки непосредственно вдохновлен Inquirer.js
Вы подошли к проблеме с неправильного угла. commander
или node-cmd
позволяют запускать команды оболочки внутри узловой программы. Вам нужно фактически реализовать оболочку.
Отправной точкой должен быть модуль 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();
}
});