Windows上的Node.Js-如何清除控制台


83

作为Node.js环境和哲学的新手,我想回答几个问题。我已经下载了Windows安装程序的node.js和节点包管理器.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 2012年

@Raynos我该怎么做。关闭命令提示符,然后再次打开?那时我会开始讨厌NodeJ。有没有办法清除控制台?
Deeptechtons 2012年

1
清除什么控制台?Windows cmd shell或powershell还是unix shell?您尝试过cls还是clear
雷诺斯2012年

Answers:


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

这适用于linux。不确定Windows。

您可以使用以下方式“欺骗”用户:

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

只有第二个“把戏”对我有用,其余所有答案都没有用。在Windows8上使用nodemon
laggingreflex 2014年

8
万一有人之以鼻。在Windows:上process.stdout.write('\033c');,因为'\033[2J'仅清除当前应用程序流,并'\033c'重置std
tenbits 2014年

19
这是ANSI逸出代码,以防万一(我是)。该\033是ESC的ASCII码的八进制数。用支架形成CSI(控制序列介绍器)。 0J1J以及分别2J清除顶部,底部和整个屏幕。
杰瑞德·贝克

2
@TedNyberg您是正确的,它不能在严格模式(八进制文字)下工作,但是您可以根据需要使用“ \ x1BC”或“ \ x1B [EJ””来解决此问题。
瑞安·托马斯

1
@TedNyberg除了十六进制文字(\ x ...)Unicode文字(\ u ...)之外,例如Iaktak的答案也适用。
瑞安·托马斯

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

这也适用于Windows。至少是Win7。


2
这是这里列出的唯一在Server 2008 r2上对我有用的转义序列,并且在我的Windows 7系统上也能很好地工作。
pierce.jason 2014年

也适用于10。
oooyaya

这应该是可接受的答案,因为它是跨平台的,并且清除后不会留下空白。
David Callanan

在Ubuntu上工作。

在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几乎讨厌所有ansi转义代码。
joshua-anderson

2
是的,我正在使用它。这些代码可能由nodejs解释。
laktak

2
并且这在严格模式下有效,该模式在使用\ 033解决方案时会抱怨八进制文字
chriskelly,2015年

我更喜欢这个,而不是公认的答案。重置回0,0使您更接近Windows 10 Powershell中的适当“ cls”。
史蒂夫·库珀

49

这主要用于Linux,但据报道也可以在Windows中使用。

Ctrl + L在Gnome终端在清零终端本身。它可以与Python,Node JS或任何可能使用终端的解释器一起使用。我倾向于清除很多次,因此非常方便。只需在Gnome Terminal中进行清除即可Ctrl + L,这与REPL的运行无关。


4
在Windows 8命令提示符下使用节点时,按Ctrl + L可以清除屏幕
Namila 2015年

4
这应该是首选答案,因为节点REPL使用gnom-terminal,因此ctrl + 1在Windows上也可以使用。
IGRACH

2
很棒的建议!这将清除屏幕,仅保留>和光标。
Brylie Christopher Oxley

Windows 10通过将先前的内容滚动到视线之外,使其看起来清晰。如果向上滚动,旧内容仍会重新出现。
joedotnot

Linux中为此提供了reset命令。但是应该在Terminal中给出。
Nishant

29

我正在使用Windows CMD,这对我有用

console.clear();

这也适用于Node.js的v14.0.0在Mac OS 10.15(卡塔利娜)在终端
阿米尔



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
我的猜测是Windows需要“ cls”,因为“ clear”是一个* nix命令。
Steven Vachon 2014年

我们可以把clear || cls不能确定是否支持Windows||虽然
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);
}

为了使事情变得容易,我将其发布为一个名为cli-clear的npm软件包。


有趣之处:"\u001b[32;1m"甚至可以设置文本的颜色(在Windows命令行中)(-撤消代码:)"\u001b\x1b[0m"更多信息:termsys.demon.co.uk/vtansi.htmen.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

迟来了,但是如果您使用powershell,则ctrl + l在Windows中可以使用:) Powershell + Chocolatey + Node + 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();

当您运行此代码时,您将看到相同的消息“队列Test Queue中的消息数:1.”。和数字更改(1..2..3等)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.