Node.Js на вікнах - Як очистити консоль


83

Будучи абсолютно новим у середовищі та філософії 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, оболонка PowerShell або Unix? Ви пробували clsчи clear?
Рейнос

Відповіді:


101
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
на випадок, якщо хтось це зіпсує. На вікнах:, process.stdout.write('\033c');оскільки '\033[2J'лише очищає поточний потік додатків і '\033c'скидає std
tenbits

19
Це вхідний код ANSI , на випадок, якщо б вам було цікаво (мені було). \033Це вісімкове число ESC в ASCII. За допомогою дужки він утворює CSI (Control Sequence Introducer). 0J, 1JІ 2Jясно , зверху, знизу, і весь екран, відповідно.
Джаред Бек,

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

1
@TedNyberg на додаток до шістнадцяткових літералів (\ x ...) літералів Unicode (\ u ...), таких як відповідь Яктака.
Райан Томас

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

Це також працює на вікнах. Win7 принаймні.


2
Це єдина перелічена тут послідовність виходів, яка працювала для мене на Server 2008 r2, і вона також добре працює в моїй системі Windows 7.
pierce.jason

Працює і на 10.
oooyaya

це має бути прийнятою відповіддю, оскільки вона є міжплатформою і не залишає пробілів після очищення.
Девід Калланан

Працює на Ubuntu.

Працює на mac (10.15.x)
Мош Фе

53

Це очищає консоль у Windows і встановлює курсор 0,0:

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

або

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

Ви впевнені, що це працює на вікнах? Я знаю, що windows ненавидить майже всі коди входу ansi.
Джошуа-Андерсон

2
Так, я цим користуюся. Коди, ймовірно, інтерпретуються nodejs.
laktak

2
і це працює в суворому режимі, який скаржиться на восьмеричну літералу при використанні рішень \ 033
chriskelly

Я віддаю перевагу цьому перед прийнятою відповіддю; повернення до 0,0 дає вам наближення до належного "cls" у Windows 10 Powershell.
Steve Cooper

49

Це в основному для Linux, але також повідомляється, що він працює в Windows.

Існує Ctrl + Lтермінал Gnome, який очищає термінал як такий. Його можна використовувати з Python, Node JS або будь-яким інтерпретатором, який, мабуть, використовує термінал. Я схильний багато разів пояснювати, отже, це дуже зручно. Замість того, щоб робити чітке в Gnome Terminal ви можете просто зробити Ctrl + L, це не має нічого спільного з запущеним REPL.


4
Ctrl + L очищає екран під час використання вузла в командному рядку Windows 8
Namila

4
Цю відповідь слід віддавати перевагу, оскільки вузол REPL використовує gnom-terminal, тому ctrl + l працює і у вікнах.
ІГРАЧ

2
Чудова пропозиція! Це очищає екран, залишаючи лише> та курсор.
Brylie Christopher Oxley

Windows 10. Створюється вигляд, що він очищений шляхом прокручування попереднього вмісту з поля зору. Якщо прокрутити вгору, старий вміст все одно знову з’явиться.
joedotnot

Для цього в Linux існує команда reset. Але це має бути в терміналі.
Нішант

29

я використовую CMD для Windows, і це спрацювало для мене

console.clear();

Це також працює для Node.js v14.0.0 на MacOS 10.15 (Catalina) у терміналі
Amir,



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.
Steven Vachon

ми можемо сказати clear || clsне впевнені, чи підтримує Windows, ||хоча
godblessstrawberry

7

Починаючи з 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

0

Цей код чудово працює на моїй консолі сервера node.js Windows 7.

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


0

На mac я просто використовую Cmd + K для очищення консолі, дуже зручно і краще, ніж додавати коди всередині вашого проекту, щоб це зробити.


-1

Запізнілий, але ctrl + l працює у вікнах, якщо ви використовуєте PowerShell :) Powershell + шоколадний + вузол + npm = виграш.


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

При запуску цього коду ви побачите одне і те ж повідомлення "Кількість повідомлень у черзі Тестова черга: 1." і число, що змінюється (1..2..3 тощо).


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.