Node.Js в windows - Как очистить консоль


86

Поскольку я новичок в среде и философии node.js, я хотел бы получить ответы на несколько вопросов. Я загрузил node.js для установщика Windows, а также диспетчер пакетов узлов. В настоящее время командная строка Windows Cmd используется для запуска приложений nodejs.

  1. cls очищает командное окно или ошибки в командной строке. Есть ли аналог для node.js? console.clear не существует; (или есть в какой-то другой форме?

  2. Я создал сервер с помощью этого кода ниже

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

Я изменил код на приведенный ниже и обновил браузер, чтобы обнаружить, что тип контента не меняется. Как мне увидеть изменения?

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
Перезагрузите сервер, чтобы увидеть изменения
Raynos

@Raynos, как мне это сделать. Закрыть командную строку и снова открыть? чувак, тогда я бы начал ненавидеть NodeJs. Нет возможности очистить консоль?
Deeptechtons

1
понятно какая консоль? Windows cmd shell или powershell или unix shell? Вы пробовали clsили clear?
Raynos

Ответы:


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

Это работает в Linux. Не уверен насчет окон.

Вы можете «обмануть» пользователя примерно так:

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

У меня сработала только вторая "уловка", остальные все ответы бесполезны . Использование nodemon на windows8
laggingreflex

8
на случай, если кто-то запутается. В windows:, process.stdout.write('\033c');as '\033[2J'только очищает текущий поток приложения и '\033c'сбрасывает std
tenbits

19
Это escape-код ANSI на случай, если вам интересно (я был). Это \033восьмеричное число ESC в ASCII. Вместе с скобкой он образует CSI (Control Sequence Introducer). 0J, 1JИ 2Jясно , сверху, снизу, и весь экран, соответственно.
Джаред Бек

2
@TedNyberg Вы правы, что он не будет работать в строгом режиме (восьмеричный литерал), но вы можете обойти это, используя "\ x1BC" или "\ x1B [EJ", в зависимости от того, что вам нужно.
Райан Томас

1
@TedNyberg в дополнение к шестнадцатеричным литералам (\ x ...) литералы Юникода (\ u ...), такие как в ответе Яктака, также работают.
Райан Томас

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

Это также работает с окнами. Как минимум Win7.


2
Это была единственная перечисленная здесь escape-последовательность, которая сработала для меня на Server 2008 r2, а также хорошо работает в моей системе Windows 7.
pierce.jason

Работает и на 10.
oooyaya

это должен быть принятый ответ, поскольку он кроссплатформенный и не оставляет пробелов после очистки.
Дэвид

Работает на Ubuntu.

1
Работает на mac (10.15.x)
Mosh Feu

53

Это очищает консоль в Windows и помещает курсор на 0,0:

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

или же

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

Вы уверены, что это работает в Windows? Я знаю, что Windows ненавидит почти все escape-коды ANSI.
Джошуа-Андерсон

2
Да, пользуюсь. Коды, вероятно, интерпретируются nodejs.
laktak

2
и это работает в строгом режиме, который жалуется на восьмеричный литерал при использовании решений \ 033
chriskelly

Я предпочитаю это принятому ответу; возврат к 0,0 приближает вас к правильному «cls» в Windows 10 Powershell.
Стив Купер,

50

Это в основном для Linux, но, как сообщается, работает и в Windows.

Есть Ctrl + Lв Gnome Terminal, который очищает терминал как таковой. Его можно использовать с Python, Node JS или любым интерпретатором, предположительно использующим терминал. Я стараюсь очищать много раз, поэтому это очень удобно. После того, как вы сделаете clear в Gnome Terminal, вы можете просто сделать Ctrl + L, это не имеет ничего общего с запущенным REPL.


4
Ctrl + L очищает экран при использовании узла в командной строке Windows 8
Намила

4
Это должен быть предпочтительный ответ, потому что узел REPL использует gnom-terminal, поэтому ctrl + l работает и в Windows.
IGRACH

2
Отличное предложение! Экран очищается, остаются только> и курсор.
Брайли Кристофер Оксли

Windows 10. Создает впечатление, что он очищен, прокручивая предыдущее содержимое вне поля зрения. Если вы прокрутите вверх, старый контент все равно появится снова.
joedotnot

Для этого в Linux есть команда сброса. Но нужно указать в Терминале.
Nishant

30

Я использую CMD Windows, и это сработало для меня

console.clear();

Это также работает для Node.js v14.0.0 на MacOS 10.15 (Catalina) в терминале
Амир

29

И чтобы очистить консоль в строгом режиме в Windows:

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


Также работал на всех платформах (CMD, Cmder, GitBash, Ubuntu).
Valentin P

Я попробовал, cosole.log('\x1Bc')и он работает, проще, чем другие решения, строгий режим не нужен.
27px

работает в Mac OS Mojave и полностью очищает журнал.
Tomasz Szawara


8

Не тестировал это в Windows, но работает в unix. Хитрость в child_processмодуле. Проверить документацию. Вы можете сохранить этот код как файл и загружать его в REPL каждый раз, когда он вам понадобится.

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

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

3
я предполагаю, что вам понадобится "cls" для Windows, поскольку "clear" - это команда * nix.
Стивен Вашон

мы можем поставить clear || clsне уверен , что если окна поддержки ||хотя
godblessstrawberry

8

Начиная с Node.JS v8.3.0 вы можете использовать метод clear :

console.clear()

Я пришел сюда, потому что это то, что я уже сделал, и на самом деле это работает бессистемно (
godblessstrawberry


3

Если вы используете, VSCodeвы можете использовать CTRL + K. Я знаю, что это не универсальное решение, но может помочь некоторым людям.


Также работает на PHPStorm. Ctrl+Kкажется единственным решением, когда node.js не восстанавливает консоль при следующем запуске.
bencergazda

1

Основываясь на ответе sanatgersappa и некоторой другой информации, которую я нашел, вот что я придумал:

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

Чтобы упростить задачу , я выпустил это как пакет npm под названием cli-clear .


Немного забавы: с помощью "\u001b[32;1m"вы можете установить даже цвет текста (в командной строке Windows) (- код отмены :)"\u001b\x1b[0m" подробнее: termsys.demon.co.uk/vtansi.htm и en.wikipedia.org/wiki/ANSI_escape_code

1

Вы можете использовать readlineмодуль:

readline.cursorTo(process.stdout, 0, 0) перемещает курсор в (0, 0).

readline.clearLine(process.stdout, 0) очищает текущую строку.

readline.clearScreenDown(process.stdout) очищает все, что находится под курсором.

const READLINE = require('readline');

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

0

Я не мог заставить ничего из вышеперечисленного работать. Я использую nodemon для разработки и считаю, что это самый простой способ очистить консоль:

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

Он просто прокручивает консоль на несколько строк, так что вы получаете чистый экран для последующих команд console.log.

Надеюсь, это кому-то поможет.


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

0

Этот код отлично работает на моей серверной консоли node.js Windows 7.

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


-1

Запоздало, но ctrl + l работает в Windows, если вы используете powershell :) Powershell + chocolatey + node + npm = win.


-1

В моем случае я сделал это, чтобы зациклить навсегда и показать в консоли число, которое когда-либо было в одной строке:

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

Когда вы запустите этот код, вы увидите то же сообщение «Количество сообщений в очереди Test Queue: 1.» и изменение числа (1..2..3 и т. д.).


-1

На Mac я просто использую Cmd + K для очистки консоли, что очень удобно и лучше, чем добавление кодов внутри вашего проекта для этого.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.