Node.js для начинающих: пошаговая установка и создание приложения
#Node.js #npm и зависимости #Установка софтаДля кого эта статья:
- Начинающие разработчики, стремящиеся изучить Node.js и веб-разработку
- Опытные разработчики, желающие расширить свои навыки в серверной разработке на JavaScript
- Студенты и профессионалы IT-индустрии, интересующиеся современными технологиями веб-разработки
Представьте, вы открываете терминал, вводите несколько строк кода, и через секунды у вас работает полноценный веб-сервер. Звучит как магия? На самом деле это реальность, доступная каждому, кто освоит Node.js — технологию, перевернувшую мир веб-разработки. Независимо от того, пишете ли вы первую строчку кода или уже знакомы с JavaScript в браузере, Node.js открывает новые горизонты возможностей. В этом руководстве я проведу вас через все этапы: от установки платформы до запуска вашего первого работающего приложения. Готовы создать что-то крутое за считанные минуты? 🚀
Что такое Node.js и почему он популярен в веб-разработке
Node.js — это не язык программирования, а среда выполнения JavaScript на серверной стороне, построенная на движке V8 от Chrome. Проще говоря, это платформа, которая позволяет запускать JavaScript вне браузера. Возникает вопрос: почему это так революционно?
До появления Node.js в 2009 году, JavaScript использовался исключительно в браузерах. Разработчикам приходилось изучать отдельный язык для написания серверной логики (PHP, Ruby, Python). Node.js изменил правила игры, позволив использовать один язык как для фронтенда, так и для бэкенда.
Артём Соколов, ведущий архитектор веб-приложений
Помню свой первый проект на Node.js в 2012 году. Мы с командой привыкли разделять разработку: фронтенд-команда писала на JavaScript, бэкенд-специалисты использовали PHP. Коммуникация между ними часто затягивалась, что тормозило проект. Когда мы перешли на Node.js для API-слоя, эффективность выросла на 40%. Разработчики могли свободно перемещаться между задачами без необходимости "переключать" мышление между разными языками. Особенно ценным оказалась возможность переиспользовать модели данных и валидационную логику и на клиенте, и на сервере. Наш первый сервис на Node.js обрабатывал более 5000 запросов в секунду на обычном виртуальном хостинге — цифры, которые впечатляли в то время.
Преимущества Node.js, сделавшие его стандартом индустрии:
- Асинхронность и неблокирующий ввод-вывод: Node.js не ждет завершения операций ввода-вывода (чтения файла, запроса к БД), а продолжает выполнять код, обрабатывая результат по готовности.
- Высокая производительность: Благодаря событийно-ориентированной архитектуре и движку V8, Node.js демонстрирует впечатляющую скорость для задач с интенсивным вводом-выводом.
- Единая экосистема: NPM (Node Package Manager) — крупнейший в мире репозиторий модулей с более чем 1,3 миллиона пакетов.
- Универсальность: Подходит для широкого спектра задач — от API и микросервисов до десктопных приложений и IoT-устройств.
| Тип приложений | Почему Node.js подходит | Примеры использования |
|---|---|---|
| Веб-серверы и API | Асинхронная обработка множества одновременных запросов | REST API, GraphQL серверы |
| Приложения реального времени | Отличная поддержка WebSockets | Чаты, стриминг, онлайн-игры |
| Однострочные приложения (SPA) | Рендеринг на стороне сервера | React (Next.js), Vue (Nuxt.js) |
| Микросервисы | Легкие, быстро масштабируемые процессы | Сервисы обработки данных, шлюзы API |
Сегодня Node.js используется такими компаниями как Netflix, PayPal, Uber, LinkedIn и многими другими. Согласно статистике Stack Overflow 2023 года, Node.js остается одной из самых любимых и востребованных технологий с более чем 65% разработчиков, использующих его регулярно. 💼

Установка Node.js на Windows, macOS и Linux
Установка Node.js — это первый шаг в вашем путешествии по серверной разработке на JavaScript. Процесс установки отличается в зависимости от операционной системы, но в любом случае занимает не более 5 минут.
Перед установкой стоит знать, что существуют две версии Node.js:
- LTS (Long Term Support) — стабильная версия с долгосрочной поддержкой, рекомендуемая для большинства пользователей
- Current — содержит новейшие функции, но может быть менее стабильной
Для начинающих всегда рекомендую выбирать LTS-версию, поскольку она обеспечивает большую совместимость с пакетами NPM и более предсказуемое поведение.
Теперь рассмотрим процесс установки на разных платформах:
Установка на Windows
- Перейдите на официальный сайт
nodejs.org - Скачайте установщик LTS-версии для Windows (.msi файл)
- Запустите загруженный файл и следуйте инструкциям мастера установки
- Убедитесь, что опция "Automatically install the necessary tools..." отмечена
- После завершения установки откройте командную строку (CMD) или PowerShell и проверьте установку, введя:
node -v
npm -v
Установка на macOS
На macOS у вас есть несколько вариантов установки:
- Через установщик:
- Скачайте macOS Installer (.pkg) с официального сайта
- Запустите файл и следуйте инструкциям установки
- Через Homebrew (рекомендуемый способ):
- Установите Homebrew, если он еще не установлен, выполнив в терминале:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Затем установите Node.js:
brew install node
- Через NVM (Node Version Manager):
- Установите NVM:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
- Затем установите последнюю LTS-версию Node.js:
nvm install --lts
Установка на Linux
В зависимости от дистрибутива Linux:
Ubuntu/Debian:
- Обновите список пакетов:
sudo apt update
- Установите Node.js и npm:
sudo apt install nodejs npm
Для более новых версий через NodeSource:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
CentOS/RHEL/Fedora:
sudo dnf module install nodejs:18/common
Михаил Петров, DevOps-инженер
Однажды я настраивал развертывание Node.js приложения для стартапа, который разрабатывал платформу анализа данных. Команда разработчиков жаловалась на "магические" ошибки: код работал на одних машинах и не работал на других. После расследования обнаружил, что причиной были разные версии Node.js. Один разработчик использовал последнюю версию Current, другой — LTS, а на сервере была установлена устаревшая версия. Я внедрил NVM (Node Version Manager) для локальной разработки и Docker для производственной среды, зафиксировав точную версию Node.js в Dockerfile. Этот простой шаг устранил 90% непредсказуемых багов и сократил время деплоя с 15 до 3 минут. С тех пор я всегда рекомендую команде фиксировать версию Node.js в начале проекта и использовать инструменты управления версиями для обеспечения согласованной среды разработки.
После установки важно проверить, что Node.js и npm (менеджер пакетов, который устанавливается вместе с Node.js) работают корректно. Откройте терминал или командную строку и выполните:
node -v
npm -v
Если вы видите номера версий (например, v18.17.1 для Node.js и 9.6.7 для npm), значит установка прошла успешно. 🎉
Для более продвинутых пользователей или тех, кто работает с несколькими проектами, требующими разные версии Node.js, рекомендую использовать инструменты управления версиями:
- nvm (Node Version Manager) — для Unix-подобных систем
- nvm-windows — для Windows
- n — облегченный менеджер версий для Unix-систем
Первые шаги: работа с npm и создание package.json
После установки Node.js пора познакомиться с npm (Node Package Manager) — одним из самых мощных инструментов в экосистеме Node.js. NPM — это не просто менеджер пакетов, а целая инфраструктура для обмена кодом между разработчиками.
NPM предоставляет три ключевые функциональности:
- Веб-сайт
npmjs.comдля поиска пакетов и управления профилями - Интерфейс командной строки (CLI) для взаимодействия с реестром
- Реестр — база данных с метаданными о пакетах
Центральным элементом любого Node.js проекта является файл package.json. Этот файл содержит метаданные о вашем проекте, включая список зависимостей, скрипты запуска, информацию о версии и авторах.
Создание нового проекта с package.json
Для создания нового проекта выполните следующие шаги:
- Создайте новую папку для проекта и перейдите в нее:
mkdir my-first-node-app
cd my-first-node-app
- Инициализируйте проект с помощью npm:
npm init
Команда npm init запустит интерактивный процесс настройки, где вам будет предложено ввести различные данные о проекте. Вы можете нажимать Enter для использования значений по умолчанию или вводить свои варианты.
Для быстрой инициализации с параметрами по умолчанию используйте:
npm init -y
После завершения процесса в вашей папке появится файл package.json, который будет выглядеть примерно так:
{
"name": "my-first-node-app",
"version": "1.0.0",
"description": "My first Node.js application",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Your Name",
"license": "ISC"
}
Установка пакетов
Основная сила npm — это возможность устанавливать и использовать тысячи готовых пакетов. Существует два типа зависимостей:
- Зависимости проекта (dependencies) — пакеты, необходимые для работы приложения
- Зависимости разработки (devDependencies) — пакеты, используемые только при разработке и тестировании
Установка пакета как зависимости проекта:
npm install express
или сокращенно
npm i express
Установка пакета как зависимости разработки:
npm install --save-dev nodemon
или
npm i -D nodemon
После установки в вашем проекте появится папка node_modules, содержащая все установленные пакеты, а файл package.json будет обновлен новыми зависимостями:
{
"name": "my-first-node-app",
"version": "1.0.0",
"description": "My first Node.js application",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Your Name",
"license": "ISC",
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"nodemon": "^3.0.1"
}
}
Символы ^ или ~ перед номером версии указывают на стратегию обновления при установке пакетов:
| Префикс | Значение | Пример |
|---|---|---|
| ^ | Совместимое обновление (обновляет до последней минорной/патч-версии) | ^4.18.2 может обновиться до 4.99.99, но не до 5.0.0 |
| ~ | Обновление патчей (только исправления ошибок) | ~4.18.2 может обновиться до 4.18.9, но не до 4.19.0 |
| без префикса | Точная версия (без автоматического обновления) | 4.18.2 всегда будет 4.18.2 |
| latest | Всегда последняя опубликованная версия | Может привести к непредсказуемым результатам в продакшене |
Использование скриптов npm
Секция scripts в package.json позволяет определить команды, которые можно запускать с помощью npm. Это удобный способ автоматизировать повторяющиеся задачи. Например, добавим скрипты для запуска приложения:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
Теперь вы можете запустить эти команды с помощью:
npm start
(запуск в обычном режиме)
npm run dev
(запуск с автоматическим перезапуском при изменении файлов)
Важно понимать, что npm start — это специальный сокращенный скрипт. Для всех остальных скриптов необходимо использовать префикс run, например npm run dev. 🔄
Создаём простое серверное приложение на Node.js
Теперь, когда вы освоили базовые инструменты Node.js, пришло время создать ваше первое работающее приложение. Мы создадим простой веб-сервер, который будет отвечать на HTTP-запросы.
Существует два основных подхода к созданию веб-сервера на Node.js:
- Использование встроенного модуля
http— базовый способ, но требует написания большего количества кода - Использование фреймворка
Express— более высокоуровневый подход, значительно упрощающий разработку
Начнем с простейшего примера с использованием встроенного модуля http. Создайте файл index.js в корне вашего проекта и добавьте следующий код:
// Импортируем встроенный модуль http
const http = require('http');
// Определяем порт, на котором будет работать сервер
const PORT = 3000;
// Создаем HTTP сервер
const server = http.createServer((req, res) => {
// Устанавливаем заголовок ответа с типом содержимого
res.setHeader('Content-Type', 'text/html');
// В зависимости от запрошенного URL отправляем разный контент
if (req.url === '/') {
res.statusCode = 200;
res.end('<h1>Добро пожаловать на мой первый Node.js сервер!</h1>');
} else if (req.url === '/about') {
res.statusCode = 200;
res.end('<h1>О сервере</h1><p>Это простой веб-сервер на Node.js.</p>');
} else {
res.statusCode = 404;
res.end('<h1>404: Страница не найдена</h1>');
}
});
// Запускаем сервер на указанном порту
server.listen(PORT, () => {
console.log(`Сервер запущен на порту ${PORT}`);
});
Теперь запустите сервер с помощью команды:
node index.js
Вы должны увидеть сообщение "Сервер запущен на порту 3000" в консоли. Откройте браузер и перейдите по адресу http://localhost:3000, чтобы увидеть ваш сервер в действии.
Хотя этот пример демонстрирует основные принципы работы с HTTP в Node.js, в реальных проектах обычно используют Express.js — самый популярный веб-фреймворк для Node.js. Express значительно упрощает создание маршрутов, обработку запросов и управление middleware.
Создадим тот же сервер, но с использованием Express. Сначала установим его, если еще не сделали это:
npm install express
Теперь обновим наш файл index.js:
// Импортируем Express
const express = require('express');
// Создаем экземпляр приложения Express
const app = express();
const PORT = 3000;
// Определяем маршрут для главной страницы
app.get('/', (req, res) => {
res.send('<h1>Добро пожаловать на мой первый Express сервер!</h1>');
});
// Маршрут для страницы About
app.get('/about', (req, res) => {
res.send('<h1>О сервере</h1><p>Это простой веб-сервер на Express.js.</p>');
});
// Обработка запросов к неопределенным маршрутам
app.use((req, res) => {
res.status(404).send('<h1>404: Страница не найдена</h1>');
});
// Запускаем сервер
app.listen(PORT, () => {
console.log(`Сервер Express запущен на порту ${PORT}`);
});
Перезапустите сервер и проверьте его работу в браузере. Обратите внимание, насколько код стал чище и более структурированным с использованием Express.
Теперь давайте сделаем наше приложение немного более интерактивным, добавив простую форму и обработку POST-запросов:
Сначала установим middleware для работы с данными формы:
npm install body-parser
Обновим наш файл index.js:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;
// Middleware для обработки данных формы
app.use(bodyParser.urlencoded({ extended: false }));
// Главная страница с формой
app.get('/', (req, res) => {
res.send(`
<h1>Мой Node.js сервер</h1>
<form action="/submit" method="POST">
<div>
<label for="name">Ваше имя:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="message">Сообщение:</label>
<textarea id="message" name="message" required></textarea>
</div>
<button type="submit">Отправить</button>
</form>
`);
});
// Обработка отправки формы
app.post('/submit', (req, res) => {
const { name, message } = req.body;
res.send(`
<h1>Получено сообщение!</h1>
<p><strong>От:</strong> ${name}</p>
<p><strong>Сообщение:</strong> ${message}</p>
<a href="/">Вернуться на главную</a>
`);
});
app.get('/about', (req, res) => {
res.send('<h1>О сервере</h1><p>Это простой веб-сервер на Express.js.</p>');
});
app.use((req, res) => {
res.status(404).send('<h1>404: Страница не найдена</h1>');
});
app.listen(PORT, () => {
console.log(`Сервер Express запущен на порту ${PORT}`);
});
Теперь ваше приложение имеет форму для ввода данных и может обрабатывать отправленную информацию! 📝
Запуск, отладка и расширение возможностей вашего приложения
Теперь, когда у вас есть работающее Node.js приложение, пора рассмотреть, как эффективно запускать, отлаживать и расширять его возможности.
Режимы запуска приложения
Существует несколько способов запуска Node.js приложения, каждый из которых подходит для различных сценариев:
- Базовый запуск:
node index.js– простой запуск без дополнительных возможностей - Автоматический перезапуск при изменении кода:
nodemon index.js– удобно для разработки - Запуск через npm-скрипты:
npm startилиnpm run dev– рекомендуемый подход для проектов
Для удобства разработки, если вы еще не добавили скрипты в package.json, сделайте это сейчас:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js",
"test": "echo \"Error: no test specified\" && exit 1"
}
Отладка Node.js приложений
Существует несколько способов отладки Node.js приложений:
- Использование console.log — простейший способ:
console.log('Данные запроса:', req.body);
console.log('Что-то пошло не так:', error);
- Встроенный отладчик Node.js:
node --inspect index.js
Затем откройте Chrome и перейдите по адресу chrome://inspect, чтобы подключиться к отладчику.
- Отладка в VS Code — самый удобный способ:
- Создайте файл .vscode/launch.json с конфигурацией запуска
- Установите точки останова, кликнув слева от номера строки
- Нажмите F5 или выберите "Run and Debug" в меню слева
Пример конфигурации для VS Code (launch.json):
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": ["<node_internals>/**"],
"program": "${workspaceFolder}/index.js"
}
]
}
Расширение возможностей приложения
Когда ваше базовое приложение работает, вы можете расширить его функциональность с помощью дополнительных модулей и инструментов:
| Категория | Популярные пакеты | Применение |
|---|---|---|
| Шаблонизация | ejs, pug, handlebars | Создание динамических HTML-страниц |
| Базы данных | mongoose, sequelize, prisma | Работа с MongoDB, MySQL, PostgreSQL |
| Аутентификация | passport, jsonwebtoken, bcrypt | Авторизация пользователей, JWT-токены |
| API-документация | swagger-ui-express, openapi | Автоматическая генерация документации |
| Тестирование | jest, mocha, supertest | Модульное и интеграционное тестирование |
| Логирование | winston, morgan, pino | Ведение журналов работы приложения |
Пример добавления шаблонизатора EJS
Добавим в наше приложение шаблонизатор EJS для более удобного формирования HTML-страниц:
npm install ejs
Теперь обновим наш файл index.js:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = 3000;
// Настройка EJS как шаблонизатора
app.set('view engine', 'ejs');
app.set('views', './views');
// Middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static('public')); // Для статических файлов
// Маршруты
app.get('/', (req, res) => {
res.render('index', { title: 'Мой Node.js сервер' });
});
app.post('/submit', (req, res) => {
const { name, message } = req.body;
res.render('message', {
title: 'Сообщение получено',
name,
message
});
});
app.get('/about', (req, res) => {
res.render('about', { title: 'О сервере' });
});
// Обработка 404
app.use((req, res) => {
res.status(404).render('404', { title: 'Страница не найдена' });
});
app.listen(PORT, () => {
console.log(`Сервер Express запущен на порту ${PORT}`);
});
Затем создайте директорию views и добавьте файлы шаблонов:
views/index.ejs:
<%- include('partials/header') %>
<h1><%= title %></h1>
<form action="/submit" method="POST">
<div>
<label for="name">Ваше имя:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="message">Сообщение:</label>
<textarea id="message" name="message" required></textarea>
</div>
<button type="submit">Отправить</button>
</form>
<%- include('partials/footer') %>
views/partials/header.ejs:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= title %></title>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<nav>
<a href="/">Главная</a>
<a href="/about">О сервере</a>
</nav>
<main>
views/partials/footer.ejs:
</main>
<footer>
<p>© <%= new Date().getFullYear() %> Моё Node.js приложение</p>
</footer>
</body>
</html>
Создайте также директорию public/css и добавьте файл style.css с базовыми стилями:
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
nav {
margin-bottom: 20px;
}
nav a {
margin-right: 10px;
}
form div {
margin-bottom: 10px;
}
input, textarea {
width: 100%;
padding: 8px;
margin-top: 5px;
}
button {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
border: none;
cursor: pointer;
}
Теперь у вас есть полноценное приложение с разделенной логикой и представлением, стилизацией и переиспользуемыми компонентами! 🚀
Дальнейшие шаги
Когда вы освоите основы, рассмотрите следующие направления развития:
- Подключение базы данных (MongoDB с Mongoose или SQL с Sequelize)
- Добавление аутентификации пользователей
- Разработка REST API для мобильных приложений
- Интеграция с внешними API (платежные системы, карты, соцсети)
- Развертывание на платформах типа Heroku, Vercel или AWS
Мы прошли весь путь от установки Node.js до создания работающего веб-приложения с серверной логикой, обработкой форм и шаблонизацией. Вы познакомились с ключевыми инструментами экосистемы — npm, Express и системой модулей. Теперь у вас есть прочный фундамент для дальнейшего изучения серверной разработки на JavaScript. Практикуйтесь, экспериментируйте с новыми пакетами и функциональностью, и вскоре вы сможете создавать сложные, масштабируемые приложения. Помните: в мире Node.js лучший способ учиться — это кодить и пробовать новое. Поэтому не откладывайте — запустите свой сервер прямо сейчас!
Никита Титов
разработчик Node.js