1. Стандартные модули Node.js: что это и зачем нужны
Node.js — не просто среда для запуска JavaScript, а целый набор инструментов для работы с файлами, сетью, процессами и многим другим. Чтобы не изобретать велосипед каждый раз, Node.js поставляется с обширной библиотекой стандартных модулей (или core modules), которые можно использовать без дополнительной установки.
Вот несколько примеров стандартных модулей:
- os — информация о вашей операционной системе.
- process — работа с процессом Node.js, аргументами командной строки, переменными окружения.
- util — набор утилит для работы с объектами, форматирования, наследования и др.
- fs — работа с файловой системой.
- path — работа с путями к файлам и папкам.
- http, https — создание HTTP(S)-серверов и клиентов.
- ...и ещё десятки других!
Важный момент: стандартные модули всегда доступны, никаких зависимостей ставить не нужно.
2. Импорт стандартных модулей: синтаксис
В Node.js вы можете импортировать стандартные модули двумя способами: через require (CommonJS) или через import (ESM). В этом курсе мы используем обе схемы, но большинство стандартных модулей изначально ориентированы на CommonJS.
Пример: импорт через require
const os = require('os');
const process = require('process');
const util = require('util');
Пример: импорт через import (ESM)
import os from 'os';
import process from 'process';
import util from 'util';
Примечание: Для использования import ваш файл должен иметь расширение .mjs или в package.json должна быть указана "type": "module". Если вы не уверены — используйте require.
3. Модуль os: работа с операционной системой
Модуль os позволяет узнать много интересного о вашей системе — например, сколько у вас ядер процессора, какой у вас пользователь, какая платформа, сколько свободной памяти и т.д.
Основные методы модуля os
| Метод | Описание |
|---|---|
|
Название платформы (например, 'win32', 'linux') |
|
Архитектура процессора ('x64', 'arm', и т.д.) |
|
Информация о каждом ядре процессора |
|
Всего памяти (в байтах) |
|
Свободной памяти (в байтах) |
|
Домашняя директория пользователя |
|
Имя компьютера |
|
Время работы системы (в секундах) |
Пример использования os
Давайте добавим в наше приложение информацию о системе:
// system-info.js
const os = require('os');
console.log('Операционная система:', os.platform());
console.log('Архитектура процессора:', os.arch());
console.log('Имя компьютера:', os.hostname());
console.log('Домашняя папка:', os.homedir());
console.log('Свободно памяти (МБ):', Math.round(os.freemem() / 1024 / 1024));
console.log('Время работы системы (часы):', Math.round(os.uptime() / 3600));
Попробуйте запустить этот файл через node system-info.js — и посмотрите, что выведется!
4. Модуль process: управление процессом Node.js
Модуль process — это неотъемлемая часть Node.js, позволяющая работать с текущим процессом, его аргументами, переменными окружения, завершать процесс и многое другое.
Основные возможности process
- process.argv — массив аргументов командной строки.
- process.env — объект всех переменных окружения.
- process.exit([код]) — завершить процесс с указанным кодом.
- process.cwd() — текущая рабочая директория.
- process.pid — идентификатор процесса.
- process.memoryUsage() — информация об используемой памяти.
Пример: разбор аргументов
// args-demo.js
console.log('Аргументы командной строки:', process.argv);
// Запустите: node args-demo.js hello world
// Вывод: [ '/usr/bin/node', '/path/to/args-demo.js', 'hello', 'world' ]
Пример: переменные окружения
// env-demo.js
console.log('NODE_ENV:', process.env.NODE_ENV);
// Запустите: NODE_ENV=production node env-demo.js
// Вывод: NODE_ENV: production
Заметка: На Windows переменные окружения задаются иначе: set NODE_ENV=production && node env-demo.js
5. Модуль util: полезные утилиты
Модуль util — это кладезь для программиста, в нём есть функции для форматирования, отладки, создания наследования, преобразования callback-функций в промисы и др.
Основные функции util
| Функция | Описание |
|---|---|
|
Форматирует строку как в printf |
|
Строковое представление объекта для отладки |
|
Преобразует callback-функцию в функцию, возвращающую Promise |
|
Помечает функцию как устаревшую |
Пример: util.format и util.inspect
const util = require('util');
const name = 'Алиса';
const age = 21;
console.log(util.format('Имя: %s, возраст: %d', name, age)); // Имя: Алиса, возраст: 21
const obj = { foo: 'bar', baz: { a: 1, b: [2, 3] } };
console.log(util.inspect(obj, { colors: true, depth: 2 }));
Пример: util.promisify
Допустим, у нас есть функция с колбэком:
const fs = require('fs');
const util = require('util');
const readFileAsync = util.promisify(fs.readFile);
readFileAsync('package.json', 'utf-8')
.then(data => console.log(data))
.catch(err => console.error('Ошибка чтения файла:', err));
6. npm: установка сторонних модулей
Node.js — это не только стандартные модули, но и тысячи сторонних пакетов, которые можно легко подключить с помощью npm (Node Package Manager). Именно npm сделал Node.js таким популярным!
Как это работает
- npm install <имя_пакета> — скачивает и добавляет пакет в папку node_modules, а также записывает его в package.json.
- npm uninstall <имя_пакета> — удаляет пакет.
- npm update — обновляет все пакеты.
Все сторонние пакеты хранятся в папке node_modules. Не стоит трогать её руками — npm всё сделает за вас.
7. Пример: подключаем chalk для красивого вывода
Пора добавить немного цвета в нашу жизнь (и консоль)! Для этого существует замечательный пакет chalk, который позволяет легко раскрашивать текст в терминале.
Установка chalk
Откройте терминал в папке вашего проекта и выполните:
npm install chalk
После этого в package.json появится новая зависимость, а в node_modules — папка с chalk.
Использование chalk (ESM и CommonJS)
CommonJS (Node.js по умолчанию)
// color-demo.js
const chalk = require('chalk');
console.log(chalk.green('Это зелёный текст!'));
console.log(chalk.red.bold('Ошибка!'));
console.log(chalk.bgYellow.black('Внимание!'));
ESM (если вы используете import)
// color-demo.mjs
import chalk from 'chalk';
console.log(chalk.blue('Привет, мир!'));
Пример: используем chalk для форматирования вывода о системе
Давайте доработаем наш system-info.js:
const os = require('os');
const chalk = require('chalk');
console.log(chalk.cyan('Операционная система:'), chalk.bold(os.platform()));
console.log(chalk.magenta('Архитектура:'), chalk.bold(os.arch()));
console.log(chalk.yellow('Имя компьютера:'), chalk.bold(os.hostname()));
console.log(chalk.green('Свободно памяти (МБ):'), chalk.bold(Math.round(os.freemem() / 1024 / 1024)));
Теперь ваш вывод не только информативен, но и радует глаз! Программисты — тоже люди, им приятно видеть красивые цвета.
8. Советы по использованию модулей
- Стандартные модули всегда импортируются по имени (например, 'os', 'fs'), никакой установки не нужно.
- Сторонние модули нужно предварительно установить через npm install.
- Если модуль не найден — скорее всего, вы забыли его установить или указали неправильное имя.
- Не стоит хранить node_modules в системе контроля версий (например, в git). Для этого есть файл package.json — он описывает все зависимости.
- Если вы хотите использовать сторонний модуль в нескольких файлах — просто импортируйте его в каждом файле, где он нужен. Node.js кэширует модули, так что они не загружаются повторно.
9. Типичные ошибки при работе с модулями
Ошибка №1: забыли установить сторонний модуль
Если вы пишете const chalk = require('chalk');, а при запуске получаете ошибку "Cannot find module 'chalk'", значит, вы забыли выполнить npm install chalk.
Ошибка №2: перепутали имя модуля
Иногда опечатка в имени (require('chlak')) приводит к неочевидной ошибке. Проверьте правильность написания.
Ошибка №3: неправильный синтаксис импорта
Если вы используете import в файле .js без "type": "module" в package.json, Node.js выдаст ошибку. В этом случае используйте require.
Ошибка №4: попытка импортировать стандартный модуль через npm
Не нужно делать npm install os или npm install fs — эти модули уже встроены в Node.js.
Ошибка №5: забыли обновить зависимости
Если вы переместили проект на другой компьютер или скачали из репозитория, не забудьте выполнить npm install для установки всех зависимостей, описанных в package.json.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ