Meine node.js
Anwendung verfügt über viele Konsolenprotokolle, die für mich wichtig sind (es ist eine ziemlich große App, läuft also lange und ich muss wissen, dass die Dinge noch im Gange sind), aber am Ende habe ich Tausende von Zeilen Konsolenprotokolle.
Ist es irgendwie möglich, console.update
eine Konsolenzeile zu löschen / zu ersetzen, anstatt eine neue Leitung zu erstellen?
javascript
node.js
JVG
quelle
quelle
Antworten:
Versuchen Sie stattdessen, mit process.stdout-Methoden auf der Konsole zu spielen:
process.stdout.write("Hello, World"); process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write("\n"); // end the line
quelle
webstorm=true
in Application Parameter in der Webstorm-Knotenkonfiguration hinzuzufügen und zu überprüfen, obprocess.argv.find(x => x.startsWith('webstorm=true')
diese Antwort verwendet wirdif (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);}"
odernode -e "for(let i=1;i<=1000;i++){process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write('hello, world')}"
Nach der Antwort von @ michelek können Sie eine Funktion wie diese verwenden:
function printProgress(progress){ process.stdout.clearLine(); process.stdout.cursorTo(0); process.stdout.write(progress + '%'); }
quelle
process.stdout.clearLine()
Natürlich können Sie dies mit einem Modul tun, das ich erstellt habe: fknsrs / jetty
Installieren über
Hier ist ein Anwendungsbeispiel
// 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");
Anlegestelle ist nicht besonders nützlich, wenn sie alleine verwendet wird. Es ist viel effektiver, wenn Sie eine Abstraktion darauf aufbauen, um Ihre Anlegestellen weniger ausführlich zu gestalten.
quelle
Eine Teilzeile schreiben.
process.stdout.write("text"); process.stdout.write("more"); process.stdout.write("\n"); // end the line
Wenn das Ausgabevolumen das eigentliche Problem ist, müssen Sie wahrscheinlich Ihre Protokollierung überdenken. Sie können ein Protokollierungssystem verwenden, das eine selektive Laufzeitprotokollierung ermöglicht, um Ihre Ausgabe auf das zu beschränken, was Sie benötigen.
// 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
quelle
Verwenden Sie einfach \ r, um Ihre Leitung zu beenden:
process.stdout.write('text\r');
Hier ist ein einfaches Beispiel (Wanduhr):
setInterval(() => process.stdout.write(`clock: ${new Date()}\r`), 1000);
quelle
Wenn Sie Standardausnahmen wie
TypeError: process.stdout.clearLine is not a function
im Debug Console-Fenster von Visual Studio Code (oder Webstorm) sehen, führen Sie die App als externe Terminalanwendung anstelle der internen Konsole aus. Der Grund ist, dass das Debug Console-Fenster nicht TTY ist (process.stdout.isTTY
falsch ist). Aktualisieren Sie daher Ihre Startkonfigurationlaunch.json
mit der"console": "externalTerminal"
Option.quelle