【问题标题】:Node.Js on windows - How to clear consoleWindows 上的 Node.Js - 如何清除控制台
【发布时间】:2012-02-18 21:20:47
【问题描述】:

对 node.js 环境和理念完全陌生,我想回答几个问题。我已经下载了 Windows 安装程序的 node.js 和 node 包管理器。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");

【问题讨论】:

  • 重启服务器查看变化
  • @Raynos 我该怎么做。关闭命令提示符并再次打开它?伙计,我会开始讨厌 NodeJs。没有办法清除控制台?
  • 清除什么控制台? windows cmd shell 或 powershell 或 unix shell?你试过clsclear 吗?
  • 对于那些想要清除控制台历史/建议的人:stackoverflow.com/a/35016953/1486850

标签: windows node.js console windows-vista


【解决方案1】:
console.log('\033[2J');

这适用于 linux。不确定 Windows。

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

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

【讨论】:

  • 以防有人发现这个问题。在 windows 上:process.stdout.write('\033c');'\033[2J' 仅清除当前应用程序流,'\033c' 重置 std
  • 这是ANSI escape code,以防你们都好奇(我是)。 \033 是 ASCII 中 ESC 的八进制数。它与支架一起形成 CSI(控制序列引入器)。 0J1J2J 分别清除顶部、底部和整个屏幕。
  • @TedNyberg 你是对的,它不能在严格模式(八进制文字)下工作,但你可以通过使用 "\x1BC" 或 "\x1B[EJ" 来解决这个问题,具体取决于你需要。
  • @TedNyberg 除了十六进制文字 (\x...) unicode 文字 (\u...),例如 Iaktak 的答案也可以。
  • 在 Windows 10 上发送特殊字符无法阻止回滚,但这有效:require('child_process').execSync('cls', {stdio: 'inherit'});
【解决方案2】:

尚未在 Windows 上对此进行测试,但可以在 unix 上运行。诀窍在于child_process 模块。检查文档。您可以将此代码保存为文件,并在每次需要时将其加载到 REPL。

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

function clear(){
    exec('clear', function(error, stdout, stderr){
        console.log(stdout);
    });    
}

【讨论】:

  • 我猜你需要 Windows 的 "cls" 因为 "clear" 是一个 *nix 命令。
  • 我们可以输入clear || cls,但不确定Windows是否支持||
【解决方案3】:

这会清除 Windows 上的控制台并将光标置于 0,0:

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

or

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

【讨论】:

  • 你确定这适用于 Windows 吗?我知道 windows 讨厌几乎所有的 ansi 转义码。
  • 是的,我正在使用它。这些代码可能由nodejs解释。
  • 并且这在严格模式下工作,在使用 \033 解决方案时抱怨八进制文字
  • 我更喜欢这个而不是接受的答案;重置回 0,0 让您更接近 Windows 10 Powershell 中的正确“cls”。
  • 这也适用于 bash。谢谢
【解决方案4】:

根据 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 包发布。

【讨论】:

【解决方案5】:

我无法让上述任何一项工作。我正在使用 nodemon 进行开发,发现这是清除控制台的最简单方法:

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

它只是将控制台滚动几行,这样您就可以清楚地看到后续的 console.log 命令。

希望对某人有所帮助。

【讨论】:

  • console.log('\n'.repeat(999))
【解决方案6】:

这主要适用于 Linux,但据报道也适用于 Windows。

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

【讨论】:

  • Ctrl+L 在 windows 8 命令提示符下使用节点时清屏
  • 这应该是首选答案,因为节点 REPL 使用 gnom-terminal,因此 ctrl+l 也适用于 Windows。
  • 好建议!这将清除屏幕,只留下 > 和光标。
  • Windows 10。通过将以前的内容滚动到视图之外,呈现出它清除的外观。如果向上滚动,旧内容仍会重新出现。
  • Linux 中有用于此的重置命令。但应该在终端中给出。
【解决方案7】:
process.stdout.write('\033c');

这也适用于 Windows。至少Win7。

【讨论】:

  • 这是这里列出的唯一一个适用于我在 Server 2008 r2 上的转义序列,它也适用于我的 Windows 7 系统。
  • 同样适用于 10。
  • 这应该是公认的答案,因为它是跨平台的,并且在清除后不会留下空白。
  • 在 Ubuntu 上工作。
  • 适用于 mac (10.15.x)
【解决方案8】:

迟到了,但如果你使用 powershell,ctrl+l 可以在 windows 中工作:) Powershell + Chocolatey + node + npm = 获胜。

【讨论】:

    【解决方案9】:

    使用严格模式解决问题:

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

    【讨论】:

      【解决方案10】:

      并在 Windows 上处于严格模式时清除控制台:

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

      【讨论】:

      • 这个有效但没有触发a JSDoc error
      • 也可以在所有平台上工作(CMD、Cmder、GitBash、Ubuntu)。
      • 我用cosole.log('\x1Bc')试了一下,效果很好,比其他解决方案简单,不需要严格模式。
      • 在 MAC OS Mojave 上工作,并清除完整日志。
      • 这是唯一一个对我有用的
      【解决方案11】:

      只需在 Windows 上使用CTRL + L 即可清除控制台。

      【讨论】:

        【解决方案12】:

        Ctrl + L这是最好、最简单、最有效的选项。

        【讨论】:

          【解决方案13】:

          此代码在我的 node.js 服务器控制台 Windows 7 上运行良好。

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

          【讨论】:

            【解决方案14】:

            如果您使用的是 VSCode,则可以使用 CTRL + K。我知道这不是一个通用的解决方案,但可能会对某些人有所帮助。

            【讨论】:

            • 也适用于 PHPStorm。 Ctrl+K 看起来是唯一的解决方案,当 node.js 在下次运行时不恢复控制台时。
            【解决方案15】:

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

            console.clear();
            

            【讨论】:

            【解决方案16】:

            在我的情况下,我这样做是为了永远循环并在控制台中显示一个数字:

            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 等)。

            【讨论】:

              【解决方案17】:

              您可以使用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);
              }
              

              【讨论】:

                【解决方案18】:

                在 mac 上,我只是简单地使用 Cmd + K 来清除控制台,非常方便,比在你的项目中添加代码来做到这一点更好。

                【讨论】:

                  【解决方案19】:

                  从 Node.JS v8.3.0 开始你可以使用方法clear:

                  console.clear()
                  

                  【讨论】:

                  • 我来到这里是因为这是我已经做过的,它实际上是不一致的(
                  【解决方案20】:

                  使用官方方式即可:

                  console.log('Blah blah blah'); // Prints "Blah blah blah"
                  
                  console.clear(); // Clears, or in other words, resets the terminal.
                  
                  console.log('You will only see this message. No more Blah blah blah...');

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2021-12-10
                    • 2011-02-28
                    相关资源
                    最近更新 更多