В моем 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
источник
webstorm=true
параметров приложения в конфигурацию узла webstorm и проверкеprocess.argv.find(x => x.startsWith('webstorm=true')
использования этого ответаif (process.stdout.clearLine) { process.stdout.clearLine() }
?node -e "for(let i=1;i<=1000;i++){process.stdout.write('Hello, World'); if(i<10)process.stdout.clearLine(); process.stdout.cursorTo(0);}"
илиnode -e "for(let i=1;i<=1000;i++){process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write('hello, world')}"
Следуя ответу @ michelek, вы можете использовать примерно такую функцию:
function printProgress(progress){ process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(progress + '%'); }
источник
process.stdout.clearLine()
Конечно, вы можете сделать это с помощью модуля, который я помог создать: fknsrs / 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");
Сама пристань не очень полезна. Гораздо эффективнее, если вы создадите поверх него некоторую абстракцию, чтобы сделать ваши вызовы на причале менее подробными.
источник
Чтобы написать частичную строку.
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
источник
Просто используйте \ r для завершения вашей строки:
process.stdout.write('text\r');
Вот простой пример (настенные часы):
setInterval(() => process.stdout.write(`clock: ${new Date()}\r`), 1000);
источник
если вы видите исключения stdout, например,
TypeError: process.stdout.clearLine is not a function
в окне консоли отладки кода Visual Studio (или Webstorm), запустите приложение как приложение внешнего терминала, а не внутреннюю консоль. Причина в том, что окно консоли отладки не является TTY (process.stdout.isTTY
неверно). Поэтому обновите конфигурацию запускаlaunch.json
с помощью"console": "externalTerminal"
option.источник