Node.js stdout clearline() и функции cursorTo()

Из учебника node.js я вижу две функции process.stdout:

process.stdout.clearLine();
process.stdout.cursorTo(0);

Но я использую более новую версию node.js(4.2.4), и эти функции не существуют. Я получаю process.stdout.clearLine is not a function и process.stdout.cursorTo is not a function.

Что эквивалентно clearLine и cursorTo на node.js версии 4.2.4?

ИЗМЕНИТЬ:

Те также не работают:

process.readline.clearLine();
process.readline.cursorTo(0);

function writeWaitingPercent(p) {
    process.readline.clearLine();
    process.readline.cursorTo(0);
    process.stdout.write(`waiting ... ${p}%`);
}

Я получаю Cannot read property 'clearLine' of undefined

Ответ 1

Это решение:

Во-первых, требуется readline:

var readline = require('readline');

Затем используйте cursorTo следующим образом:

function writeWaitingPercent(p) {
    //readline.clearLine(process.stdout);
    readline.cursorTo(process.stdout, 0);
    process.stdout.write(`waiting ... ${p}%`);
}

Я прокомментировал clearLine, так как это бесполезно в моем случае (cursorTo переместить курсор к началу)

Ответ 2

Модуль Readline, который является частью Node.js, теперь предоставляет методы readline.cursorTo(stream, x, y), readline.moveCursor(stream, dx, dy) и readline.clearLine(stream, dir).


С TypeScript ваш код должен выглядеть следующим образом:

import * as readline from 'readline'
// import readline = require('readline') also works

/* ... */

function writeWaitingPercent(p: number) {
    readline.clearLine(process.stdout, 0)
    readline.cursorTo(process.stdout, 0, null)
    let text = `waiting ... ${p}%`
    process.stdout.write(text)
}

Предыдущий код перейдет в следующий код Javascript (ES6):

const readline = require('readline');

/* ... */

function writeWaitingPercent(p) {
    readline.clearLine(process.stdout, 0);
    readline.cursorTo(process.stdout, 0, null);
    let text = `waiting ... ${p}%`;
    process.stdout.write(text);
}

В качестве альтернативы вы можете использовать следующий код для Javascript (ES6):

const readline = require('readline');

/* ... */

function waitingPercent(p) {
    readline.clearLine(process.stdout, 0)
    readline.cursorTo(process.stdout, 0)
    let text = `waiting ... ${p}%`
    process.stdout.write(text)
}

Ответ 3

если вы видите, что исключения stdout, такие как TypeError: process.stdout.clearLine не являются функцией в окне консоли отладки кода Visual Studio (или Webstorm), запустите приложение как приложение внешнего терминала вместо внутренней консоли. Причина в том, что окно консоли отладки не TTY (process.stdout.isTTY является ложным). Поэтому обновите конфигурацию запуска в launch.json с опцией "console": "externalTerminal".