Node.Js unter Windows - So löschen Sie die Konsole


82

Da ich völlig neu in der Umgebung und Philosophie von node.j bin, möchte ich Antworten auf einige Fragen. Ich hatte die Datei node.js für Windows Installer und auch den Node Package Manager heruntergeladen. Die Windows Cmd-Eingabeaufforderung wird derzeit zum Ausführen von NodeJS-Apps verwendet.

  1. cls löscht das Befehlsfenster oder Fehler in der Eingabeaufforderung. Gibt es ein Äquivalent für node.js? console.clear existiert nicht (oder in einer anderen Form?

  2. Ich habe einen Server durch diesen Code unten erstellt

    var http = require("http");
    http.createServer(function (request, response) {
        response.writeHead(200, {
            "Content-Type": "text/html"
        });
        response.write("Hello World");
        console.log("welcome world")response.end();
    }).listen(9000, "127.0.0.1");
    

Ich habe den Code unten geändert und den Browser aktualisiert, um festzustellen, dass sich der Inhaltstyp nicht ändert. Wie kann ich die Änderungen sehen?

var http = require("http");
http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  console.log("welcome world")
  response.end();
}).listen(9000,"127.0.0.1");

1
Starten Sie den Server neu, um Änderungen zu sehen
Raynos

@ Raynos wie mache ich das? Schließen Sie die Eingabeaufforderung und öffnen Sie sie erneut? Mann, ich würde dann anfangen, NodeJs zu hassen. Es gibt keine Möglichkeit, die Konsole zu löschen?
Deeptechtons

1
klar welche Konsole? Die Windows Cmd Shell oder Powershell oder Unix Shell? Hast du es versucht clsoder clear?
Raynos

Antworten:


101
console.log('\033[2J');

Dies funktioniert unter Linux. Ich bin mir nicht sicher über Windows.

Sie können den Benutzer mit so etwas "austricksen":

var lines = process.stdout.getWindowSize()[1];
for(var i = 0; i < lines; i++) {
    console.log('\r\n');
}

Nur der zweite "Trick" hat bei mir funktioniert, alle Antworten waren nutzlos . Verwenden von nodemon unter Windows 8
Laggingreflex

8
für den Fall, dass jemand dies stört. Unter Windows : process.stdout.write('\033c');, da '\033[2J'nur der aktuelle Anwendungsstrom '\033c'
gelöscht

16
Dies ist ein ANSI-Escape-Code , falls Sie neugierig waren (ich war). Das \033ist die Oktalzahl der ESC in ASCII. Mit der Klammer bildet es den CSI (Control Sequence Introducer). 0J,, 1Jund 2Jlöschen Sie den oberen, unteren und gesamten Bildschirm.
Jared Beck

2
@TedNyberg Sie haben Recht, dass es im strengen Modus (Oktal-Literal) nicht funktioniert, aber Sie können dies umgehen, indem Sie "\ x1BC" oder "\ x1B [EJ" verwenden, je nachdem, was Sie benötigen.
Ryan Thomas

1
@TedNyberg zusätzlich zu Hex-Literalen (\ x ...) Unicode-Literalen (\ u ...), wie auch in Iaktaks Antwortarbeit.
Ryan Thomas

70
process.stdout.write('\033c');

Dies funktioniert auch unter Windows. Zumindest Win7.


2
Dies war die einzige hier aufgeführte Escape-Sequenz, die für mich unter Server 2008 r2 funktioniert hat, und sie funktioniert auch auf meinem Windows 7-System.
pierce.jason

Funktioniert auch mit 10.
oooyaya

Dies sollte die akzeptierte Antwort sein, da es plattformübergreifend ist und nach dem Löschen keinen Leerraum hinterlässt.
David Callanan

Funktioniert unter Ubuntu.

Funktioniert auf dem Mac (10.15.x)
Mosh Feu

53

Dadurch wird die Konsole unter Windows gelöscht und der Cursor auf 0,0 gesetzt:

var util = require('util');
util.print("\u001b[2J\u001b[0;0H");

oder

process.stdout.write("\u001b[2J\u001b[0;0H");

Sind Sie sicher, dass dies unter Windows funktioniert? Ich weiß, dass Windows fast alle Ansi-Escape-Codes hasst.
Joshua-Anderson

2
Ja, ich benutze es. Die Codes werden wahrscheinlich von nodejs interpretiert.
Laktak

1
und dies funktioniert im strengen Modus, der sich über
Oktalliteral

Ich ziehe dies der akzeptierten Antwort vor; Wenn Sie auf 0,0 zurücksetzen, nähern Sie sich einem richtigen 'cls' in Windows 10 Powershell.
Steve Cooper

49

Dies gilt hauptsächlich für Linux, soll aber auch unter Windows funktionieren.

Es gibt Ctrl + Lin Gnome Terminal, das das Terminal als solches löscht. Es kann mit Python, Node JS oder jedem Interpreter verwendet werden, der vermutlich Terminal verwendet. Ich neige dazu, oft zu klären, daher ist dies sehr praktisch. Wenn Sie im Gnome-Terminal klarstellen, was Sie einfach tun können Ctrl + L, hat dies nichts mit der Ausführung von REPL zu tun.


4
Strg + L löscht den Bildschirm, wenn der Knoten in der Windows 8-Eingabeaufforderung verwendet wird
Namila

4
Dies sollte eine bevorzugte Antwort sein, da der Knoten REPL das Gnom-Terminal verwendet, sodass Strg + L auch unter Windows funktioniert.
IGRACH

2
Toller Vorschlag! Dies löscht den Bildschirm und lässt nur das> und den Cursor übrig.
Brylie Christopher Oxley

Windows 10. Verleiht den Eindruck, dass es durch Scrollen des vorherigen Inhalts aus der Ansicht gelöscht wurde. Wenn Sie nach oben scrollen, wird der alte Inhalt weiterhin angezeigt.
Joedotnot

Dafür gibt es in Linux einen Reset-Befehl. Sollte aber im Terminal angegeben werden.
Nishant

27

Und um die Konsole im strengen Modus unter Windows zu löschen:

'use strict';
process.stdout.write('\x1Bc'); 

Dieser funktionierte und löste keinen JSDoc-Fehler aus
James Cameron

Funktionierte auch auf allen Plattformen (CMD, Cmder, GitBash, Ubuntu).
Valentin P

27

Ich benutze ein Windows CMD und das hat bei mir funktioniert

console.clear();

Dies funktioniert auch für Node.js v14.0.0 unter MacOS 10.15 (Catalina) im Terminal
Amir Yunas


7

Habe dies nicht unter Windows getestet, funktioniert aber unter Unix. Der Trick liegt im child_processModul. Überprüfen Sie die Dokumentation. Sie können diesen Code als Datei speichern und jedes Mal, wenn Sie ihn benötigen, in die REPL laden.

var util = require('util');
var exec = require('child_process').exec;

function clear(){
    exec('clear', function(error, stdout, stderr){
        util.puts(stdout);
    });    
}

2
Ich vermute, dass Sie "cls" für Windows benötigen würden, da "clear" ein * nix-Befehl ist.
Steven Vachon

5

So lösen Sie Probleme im strengen Modus:

'use strict';
process.stdout.write('\x1B[2J');


3

Wenn Sie verwenden VSCode, können Sie verwenden CTRL + K. Ich weiß, dass dies keine generische Lösung ist, aber einigen Menschen helfen kann.


Funktioniert auch mit PHPStorm. Ctrl+Kscheint die einzige Lösung zu sein, wenn node.js die Konsole beim nächsten Lauf nicht wiederherstellt.
Bencergazda

1

Ich konnte keines der oben genannten Dinge zum Laufen bringen. Ich verwende nodemon für die Entwicklung und fand dies der einfachste Weg, um die Konsole zu löschen:

  console.log("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

Die Konsole wird nur um mehrere Zeilen gescrollt, sodass Sie einen übersichtlichen Bildschirm für nachfolgende console.log-Befehle erhalten.

Hoffe es hilft jemandem.


5
console.log('\n'.repeat(999))
Corysimmons

1

Basierend auf der Antwort von sanatgersappa und einigen anderen Informationen, die ich gefunden habe, habe ich mir Folgendes ausgedacht:

function clear() {
    var stdout = "";

    if (process.platform.indexOf("win") != 0) {
        stdout += "\033[2J";
    } else {
        var lines = process.stdout.getWindowSize()[1];

        for (var i=0; i<lines; i++) {
            stdout += "\r\n";
        }
    }

    // Reset cursur
    stdout += "\033[0f";

    process.stdout.write(stdout);
}

Um die Sache zu vereinfachen , habe ich dies als npm-Paket namens cli-clear veröffentlicht .


Ein bisschen Spaß: Mit können "\u001b[32;1m"Sie sogar die Farbe des Textes einstellen (in der Windows-Befehlszeile) (- Code rückgängig machen :)"\u001b\x1b[0m" Weitere Informationen: termys.demon.co.uk/vtansi.htm und en.wikipedia.org/wiki/ANSI_escape_code

0

Dieser Code funktioniert gut auf meiner node.js-Serverkonsole Windows 7.

process.stdout.write("\u001b[0J\u001b[1J\u001b[2J\u001b[0;0H\u001b[0;0W");


0

Sie können das readlineModul verwenden:

readline.cursorTo(process.stdout, 0, 0) bewegt den Cursor auf (0, 0).

readline.clearLine(process.stdout, 0) löscht die aktuelle Zeile.

readline.clearScreenDown(process.stdout) löscht alles unter dem Cursor.

const READLINE = require('readline');

function clear() {
    READLINE.cursorTo(process.stdout, 0, 0);
    READLINE.clearLine(process.stdout, 0);
    READLINE.clearScreenDown(process.stdout);
}

0

Auf einem Mac verwende ich einfach Cmd + K , um die Konsole zu löschen. Dies ist sehr praktisch und besser als das Hinzufügen von Codes in Ihrem Projekt, um dies zu tun.


-1

Verspätet, aber Strg + L funktioniert in Windows, wenn Sie Powershell verwenden :) Powershell + Chocolatey + Node + Npm = Gewinnen.


-1

In meinem Fall habe ich es getan, um für immer eine Schleife zu erstellen und in der Konsole eine Nummer in einer einzigen Zeile anzuzeigen:

class Status {

  private numberOfMessagesInTheQueue: number;
  private queueName: string;

  public constructor() {
    this.queueName = "Test Queue";
    this.numberOfMessagesInTheQueue = 0;
    this.main();
  }

  private async main(): Promise<any> {    
    while(true) {
      this.numberOfMessagesInTheQueue++;
      await new Promise((resolve) => {
        setTimeout(_ => resolve(this.showResults(this.numberOfMessagesInTheQueue)), 1500);
      });
    }
  }

  private showResults(numberOfMessagesInTheQuee: number): void {
    console.clear();
    console.log(`Number of messages in the queue ${this.queueName}: ${numberOfMessagesInTheQuee}.`)
  }
}

export default new Status();

Wenn Sie diesen Code ausführen, wird dieselbe Meldung angezeigt: "Anzahl der Nachrichten in der Warteschlange Testwarteschlange: 1." und die Nummer ändert sich (1..2..3 usw.).


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.