Руководство по Node.js


Часть 1
Часть 2
Часть 3
Часть 4
Руководство по Node.js (en)

REPL (Reading Evaluate Print Loop, цикл «чтение-вычисление-вывод») — это среда выполнения кода (обычно, окно терминала), которая принимает выражение, введенное пользователем, и возвращает результат вычисления этого выражения.

Чтобы в неё войти, пишем в терминале node и нажимаем Enter

REPL позволяет увидеть методы объекта
Для этого в терминале пишем Math. (с точкой в конце) и нажимаем Tab


Передача аргументов с помощью командной строки

Если запустить скрипт вот так

node index joe

получить значение joe можно

console.log(process.argv.slice(2))

Если выполним такой код

process.argv.forEach((valindex=> {
  console.log(`${index}${val}`)
})

Получим

0: C:\Program Files\nodejs\node.exe
1: C:\Users\Admin\Desktop\node-test\index
2: 1111

Первый аргумент — полный путь команды node.
Второй — полный путь исполняемого файла.
Третий - аргумент, переданный в командной строке

Переданные аргументы можно получить, создав новый массив без первых двух параметров:

const args = process.argv.slice(2)

Но параметры можно передать и так

node index name=joe

Выражение для получения аргумента становится немного запутанным

console.log(process.argv.slice(2)[0].split('=')[1])

Для разбора аргументов используем библиотеку minimist

const args = require('minimist')(process.argv.slice(2))
console.log(args['name'])

Выполняем команду

node index --name=joe // joe

Перед каждым аргументом необходимо использовать двойное тире

Метод console

%s — форматирует переменную как строку
%d — форматирует переменную как число
%i — приводит переменную к целому числу
%o — форматирует переменную как объект

console.log('My %s has %d years''cat'2// My cat has 2 years
console.log('My %s has %d years''cat'2.7// My cat has 2 years

console.clear() очищает консоль
console.count() подсчитывает количество вызовов

const oranges = ['orange''orange']
oranges.forEach(fruit => console.count(fruit))

// orange: 1
orange: 2

Подсчет времени выполнения кода

const doSomething = () => console.log('test')
const measureDoingSomething = () => {
    console.time('doSomething()')
    // выполняем какие-либо операции и засекаем время их выполнения
    doSomething()
    console.timeEnd('doSomething()')
}
measureDoingSomething()

// test
// doSomething(): 7.014ms

stdout и stderr

console.log используется для вывода сообщений в консоль. Это называется стандартным выводом или stdout.

console.error отображает поток stderr. Данный поток не выводится в консоль, а записывается в журнал ошибок (error log).

Стилизация вывода текста в консоль

Изменить цвет текста, выводимого в консоль, можно с помощью обратных последовательностей (escape sequences)
https://gist.github.com/iamnewton/8754917

Например

console.log('\x1b[33m%s\x1b[0m''hi!') // hi!

Библиотека для изменения цвета шрифта chalk https://www.npmjs.com/package/chalk

const chalk = require('chalk');
console.log(chalk.blue('Hello world!')); // Hello world!

Индикатор прогресса

Устанавливаем библиотеку Progress https://www.npmjs.com/package/progress

создаём в консоли индикатор прогресса

const ProgressBar = require('progress')

const bar = new ProgressBar(':bar', { total: 100 })
const timer = setInterval(() => {
    bar.tick()
    if (bar.complete) clearInterval(timer)
}, 100)

Получение данных, введенных пользователем, в Node.js

Для этого используется встроенный в node модуль readline https://nodejs.org/api/readline.html

const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
})

readline.question(`What is your name?`name => {
    console.log(`Hi ${name}!`)
    readline.close()
})

process.stdin - поток для чтения
process.stdout - вывод результата

Метод question() выводит в консоль первый параметр (вопрос) и ожидает ответа пользователя. При нажатии enter выполняется функция обратного вызова.

Альтернатива readline библиотека readline-sync https://www.npmjs.com/package/readline-sync

Дополнительные возможности предоставляет библиотека inquirer https://www.npmjs.com/package/inquirer

const inquirer = require('inquirer')
const questions = [
    {
        type: 'input',
        name: 'name',
        message: `What's your name?`
    }
]

inquirer.prompt(questions).then(answers => {
    console.log(`Hi ${answers['name']}!`)
})
Inquirer.js позволяет предлагать множественный выбор, предоставлять радио-кнопки, запрашивать подтверждение действия