Руководство по 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((val, index) => {
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']}!`)
})