Ответ 1
Попробуйте использовать методы process.stdout вместо этого на консоли:
process.stdout.write("Hello, World");
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write("\n"); // end the line
В моем приложении node.js
есть много консольных журналов, которые важны для меня (это довольно большое приложение, которое длится долгое время, и мне нужно знать, что все еще продолжается), но я заканчиваю с тысячами строк консольных журналов.
Как-то возможно сделать console.update
, который стирает/заменяет консольную строку, а не создает новую строку?
Попробуйте использовать методы process.stdout вместо этого на консоли:
process.stdout.write("Hello, World");
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write("\n"); // end the line
После ответа @michelek вы можете использовать функцию примерно так:
function printProgress(progress){
process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write(progress + '%');
}
Конечно, вы можете сделать это, используя модуль, который я помог создать: fknsrs/jetty
Установить через
npm install jetty
Здесь пример использования
// Yeah, Jetty!
var Jetty = require("jetty");
// Create a new Jetty object. This is a through stream with some additional
// methods on it. Additionally, connect it to process.stdout
var jetty = new Jetty(process.stdout);
// Clear the screen
jetty.clear();
// write something
jetty.text("hello world");
jetty.moveTo([0,0]);
jetty.text("hello panda");
Причал не очень полезен, когда используется на нем. Это намного эффективнее, если вы построите некоторую абстракцию поверх нее, чтобы ваши звонки на причале были менее подробными.
Посмотрите, как я использую причал в fknsrs/bento для получения дополнительных примеров использования.
Чтобы написать частичную строку.
process.stdout.write("text");
process.stdout.write("more");
process.stdout.write("\n"); // end the line
Если объем вывода является реальной проблемой, вы, вероятно, сможете пересмотреть свое ведение журнала. Вы можете использовать систему протоколирования, которая позволяет выборочно вести журнал регистрации, чтобы сузить ваш результат до того, что вам нужно.
// The sections we want to log and the minimum level
var LOG_LEVEL = 4;
var LOG_SECTIONS = ["section1","section2","section3"];
function logit(msg, section, level) {
if (LOG_SECTIONS.indexOf(section) > -1 && LOG_LEVEL >= level) {
console.log(section + ":" + msg);
}
}
logit("message 1", "section1", 4); // will log
logit("message 2", "section2", 4); // will log
logit("message 3", "section3", 2); // wont log, below log level
logit("message 4", "section4", 4); // wont log, not in a log section
если вы видите исключения stdout, такие как TypeError: process.stdout.clearLine is not a function
, в окне консоли отладки кода Visual Studio (или Webstorm), запустите приложение как приложение внешнего терминала вместо внутренней консоли. Причина в том, что окно консоли отладки не TTY (process.stdout.isTTY
является ложным). Поэтому обновите конфигурацию запуска в launch.json
с опцией "console": "externalTerminal"
.