Node.Js w systemie Windows - jak wyczyścić konsolę


86

Będąc zupełnie nowym w środowisku i filozofii node.js, chciałbym odpowiedzieć na kilka pytań. Ściągnąłem plik node.js dla instalatora systemu Windows, a także menedżera pakietów węzłów. Do uruchamiania aplikacji nodejs jest obecnie używany monit Windows Cmd.

  1. cls czyści okno poleceń lub błędy w wierszu polecenia. Czy istnieje odpowiednik dla node.js? console.clear nie istnieje; (czy jest w innej formie?

  2. Utworzyłem serwer za pomocą poniższego kodu

    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");
    

Zmieniłem kod na poniższy i odświeżyłem przeglądarkę, aby znaleźć, że typ zawartości się nie zmienia, jak mogę zobaczyć zmiany?

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
Zrestartuj serwer, aby zobaczyć zmiany
Raynos

@Raynos, jak to zrobić. Zamknąć wiersz polecenia i otworzyć go ponownie? stary, zacząłbym wtedy nienawidzić NodeJs. Nie ma sposobu, aby wyczyścić konsolę?
Deeptechtons

1
jasne, jaka konsola? Powłoka cmd systemu Windows, powłoka PowerShell czy Unix? Czy próbowałeś clslub clear?
Raynos

Odpowiedzi:


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

Działa to w systemie Linux. Nie jestem pewien co do okien.

Możesz „oszukać” użytkownika, używając czegoś takiego:

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

U mnie zadziałała tylko druga „sztuczka”, reszta wszystkie odpowiedzi były bezużyteczne . Używanie nodemona w systemie Windows8
laggingreflex

8
gdyby ktoś to zdusił. W process.stdout.write('\033c');'\033[2J''\033c'
systemie

19
To jest kod ucieczki ANSI , na wypadek gdybyście byli ciekawi (ja byłem). Jest \033to liczba ósemkowa ESC w ASCII. Wraz ze wspornikiem tworzy CSI (wprowadzający sekwencję kontrolną). 0J, 1Ji 2Jwyczyść odpowiednio górę, dół i cały ekran.
Jared Beck

2
@TedNyberg Masz rację, że nie będzie działać w trybie ścisłym (literał ósemkowy), ale możesz to obejść używając "\ x1BC" lub "\ x1B [EJ" w zależności od tego, czego potrzebujesz.
Ryan Thomas

1
@TedNyberg oprócz literałów szesnastkowych (\ x ...) literałów Unicode (\ u ...), takich jak w odpowiedzi Iaktaka, również działa.
Ryan Thomas

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

Działa to również w systemie Windows. Co najmniej Win7.


2
To była jedyna wymieniona tutaj sekwencja ucieczki, która działała dla mnie na serwerze 2008 r2, a także dobrze działa na moim systemie Windows 7.
pierce.jason

Działa również na 10.
oooyaya

powinna to być akceptowana odpowiedź, ponieważ jest to wieloplatformowa i nie pozostawia spacji po wyczyszczeniu.
David Callanan

Działa na Ubuntu.

1
Działa na Macu (10.15.x)
Mosh Feu

53

Spowoduje to wyczyszczenie konsoli w systemie Windows i umieszczenie kursora na 0,0:

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

lub

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

Czy na pewno to działa w systemie Windows? Wiem, że Windows nie znosi prawie wszystkich kodów ucieczki ANSI.
joshua-anderson

2
Tak, używam go. Kody są prawdopodobnie interpretowane przez nodejs.
laktak

2
i to działa w trybie ścisłym, który narzeka na literał ósemkowy, gdy używa się rozwiązań \ 033
chriskelly,

Wolę to od zaakceptowanej odpowiedzi; resetowanie z powrotem do 0,0 przybliża cię do właściwego „cls” w Windows 10 Powershell.
Steve Cooper

50

Dotyczy to głównie systemu Linux, ale według doniesień działa również w systemie Windows.

W Ctrl + LGnome Terminal znajduje się, który czyści terminal jako taki. Może być używany z Pythonem, Node JS lub dowolnym Interpretem, który prawdopodobnie używa terminala. Zwykle usuwam wiele razy, więc jest to bardzo przydatne. Natychmiast po wyczyszczeniu w terminalu Gnome możesz to zrobić Ctrl + L, nie ma to nic wspólnego z uruchomioną REPL.


4
Ctrl + L czyści ekran podczas używania węzła w wierszu poleceń systemu Windows 8
Namila

4
Powinno to być preferowaną odpowiedzią, ponieważ węzeł REPL używa terminala gnom, więc ctrl + l działa również w systemie Windows.
IGRACH

2
Świetna sugestia! Spowoduje to wyczyszczenie ekranu, pozostawiając tylko> i kursor.
Brylie Christopher Oxley,

Windows 10. Daje wygląd, który został wyczyszczony, przewijając poprzednią zawartość poza zasięgiem widoku. Jeśli przewiniesz w górę, stara treść nadal pojawia się ponownie.
joedotnot

W Linuksie jest do tego polecenie resetowania. Ale powinno być podane w Terminalu.
Nishant,

30

Używam Windows CMD i to zadziałało dla mnie

console.clear();

Działa to również dla Node.js 14.0.0 na MacOS 10.15 (Catalina) w terminalu
Amir

29

Aby wyczyścić konsolę w trybie ścisłym w systemie Windows:

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

Ten działał i nie wywołał błędu JSDoc
James Cameron,

Działał również na wszystkich platformach (CMD, Cmder, GitBash, Ubuntu).
Valentin P

Wypróbowałem to cosole.log('\x1Bc')i działa, prostsze niż inne rozwiązania, tryb ścisły nie był konieczny.
27px

działa w systemie MAC OS Mojave i czyści pełny dziennik.
Tomasz Szawara


8

Nie testowałem tego w systemie Windows, ale działa na unixie. Sztuczka tkwi w child_processmodule. Sprawdź dokumentację. Możesz zapisać ten kod jako plik i załadować go do REPL za każdym razem, gdy go potrzebujesz.

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

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

3
Domyślam się, że potrzebujesz "cls" dla Windows, ponieważ "clear" to polecenie * nix.
Steven Vachon

możemy umieścić clear || clsnie wiem, czy okna wspierać ||choć
godblessstrawberry

8

Począwszy od Node.JS v8.3.0 możesz użyć metody clear :

console.clear()

Przyszedłem tutaj, bo to jest to, co już robiłem i to rzeczywiście działa inconsitently (
godblessstrawberry


3

Jeśli używasz VSCode, możesz użyć CTRL + K. Wiem, że to nie jest ogólne rozwiązanie, ale może niektórym pomóc.


Działa również na PHPStorm. Ctrl+Kwydaje się być jedynym rozwiązaniem, gdy node.js nie przywraca konsoli przy następnym uruchomieniu.
bencergazda

1

Na podstawie odpowiedzi sanatgersappa i kilku innych informacji, które znalazłem, oto, co wymyśliłem:

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);
}

Dla ułatwienia wydałem to jako pakiet npm o nazwie cli-clear .


Trochę zabawy: dzięki "\u001b[32;1m"możesz ustawić nawet kolor tekstu (w linii poleceń Windows) (- cofnij kod :)"\u001b\x1b[0m" więcej informacji: termsys.demon.co.uk/vtansi.htm i en.wikipedia.org/wiki/ANSI_escape_code

1

Z readlinemodułu możesz skorzystać :

readline.cursorTo(process.stdout, 0, 0) przesuwa kursor do (0, 0).

readline.clearLine(process.stdout, 0) czyści bieżącą linię.

readline.clearScreenDown(process.stdout) czyści wszystko poniżej kursora.

const READLINE = require('readline');

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

0

Nie mogłem uruchomić żadnego z powyższych. Używam nodemona do programowania i stwierdziłem, że jest to najłatwiejszy sposób na wyczyszczenie konsoli:

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

Po prostu przewija konsolę o kilka linii, aby uzyskać przejrzysty ekran dla kolejnych poleceń console.log.

Mam nadzieję, że to komuś pomoże.


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

0

Ten kod działa dobrze na mojej konsoli serwera node.js w systemie Windows 7.

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


-1

Spóźniony, ale ctrl + l działa w Windows, jeśli używasz PowerShell :) Powershell + chocolatey + node + npm = wygrana.


-1

W moim przypadku zrobiłem to, aby zapętlić się na zawsze i pokazać w konsoli liczbę zawsze w jednej linii:

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();

Po uruchomieniu tego kodu zobaczysz ten sam komunikat „Liczba wiadomości w kolejce Kolejka testowa: 1”. i zmiana liczby (1..2..3 itd.).


-1

Na Macu po prostu używam Cmd + K, aby wyczyścić konsolę, bardzo poręczne i lepsze niż dodawanie kodów w projekcie, aby to zrobić.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.