15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать
09.10.2024

Как установить и настроить Node.js и NPM на Windows

Node.js — это кроссплатформенная среда выполнения JavaScript с открытым исходным кодом, построенная на движке V8 от Chrome, которая выполняет JavaScript-код вне браузера. NPM (Node Package Manager) — это менеджер пакетов по умолчанию, поставляемый вместе с Node.js и предоставляющий доступ к более чем двум миллионам повторно используемых пакетов. Вместе они образуют базовый инструментарий для создания серверных приложений, CLI-инструментов, REST API и полностековых JavaScript-проектов на Windows.

В этом руководстве рассматривается полный процесс установки, проверки, настройки и создания первого приложения для Node.js и NPM на Windows — включая управление версиями, устранение неполадок с PATH, разграничение глобальных и локальных пакетов, а также рекомендации производственного уровня, которые большинство руководств упускают.

Выбор правильной версии Node.js перед установкой

График выпуска Node.js следует предсказуемому циклу, который напрямую влияет на ваш выбор:

Тип выпускаСтабильностьСценарий использованияОкно поддержки
**LTS (Long-Term Support)**ВысокаяПроизводственные нагрузки, командные среды30 месяцев
**Current**УмереннаяДоступ к новейшим функциям движка V86 месяцев
**Nightly / RC**ЭкспериментальнаяРазработчики ядра, тестирование передовых функцийБез гарантий

LTS-версии имеют чётные номера мажорных версий (например, 20.x, 22.x) и получают критические патчи безопасности в течение 30 месяцев. Current-релизы имеют нечётные номера мажорных версий и переходят в статус LTS через шесть месяцев, если соответствуют критериям стабильности.

Для большинства разработчиков и серверных развёртываний — включая приложения, размещённые на VPS Хостинге — правильным выбором является LTS. Ветка Current подходит только в том случае, если вам конкретно нужна функция V8 или API Node.js, которая ещё не вошла в активную линию LTS.

NVM для Windows: профессиональная альтернатива прямой установке

Прежде чем приступить к установке через MSI-инсталлятор, подумайте, нужен ли вам nvm-for-windows (Node Version Manager для Windows). Прямой инсталлятор привязывает систему к одной версии Node.js. NVM позволяет устанавливать несколько версий параллельно и переключаться между ними для каждого проекта — это критически важно при поддержке устаревших кодовых баз наряду с современными.

Установите nvm-for-windows со страницы официальных релизов на GitHub, затем используйте:

“`

nvm install 20.14.0

nvm use 20.14.0

nvm list

“`

Если вы управляете одним проектом или впервые изучаете Node.js, MSI-инсталлятора будет достаточно. Для профессиональных сред настоятельно рекомендуется NVM.

Шаг 1: Загрузка инсталлятора Node.js

  1. Перейдите на официальный сайт Node.js по адресу nodejs.org.
  2. Выберите вкладку LTS и загрузите Windows Installer (`.msi`) для вашей архитектуры. Почти все современные машины с Windows являются 64-битными (`node-v20.x.x-x64.msi`). Сборки ARM64 доступны для устройств с Windows на ARM.
  3. Перед запуском инсталлятора проверьте контрольную сумму SHA-256 загруженного файла, сравнив её со значениями, опубликованными на странице загрузок Node.js. Этот шаг обязателен в любой среде, где важна безопасность.

Для проверки контрольной суммы в PowerShell:

“`powershell

Get-FileHash .node-v20.14.0-x64.msi -Algorithm SHA256

“`

Сравните вывод с опубликованным хешем. Несовпадение указывает на повреждённую или подменённую загрузку.

Шаг 2: Установка Node.js и NPM

  1. Дважды щёлкните загруженный файл `.msi`, чтобы запустить мастер установки.
  2. Нажмите Next на экране приветствия.
  3. Примите лицензионное соглашение с конечным пользователем и нажмите Next.
  4. Путь установки по умолчанию — `C:Program Filesnodejs`. Если у вас нет особой причины его менять (например, другой диск для управления дисковым пространством), оставьте его без изменений.
  5. На экране Custom Setup убедитесь, что выбран npm package manager. По умолчанию он включён.
  6. На экране Tools for Native Modules вы увидите опцию автоматической установки Chocolatey, Python и Visual Studio Build Tools. Установите этот флажок, если планируете устанавливать NPM-пакеты, включающие нативные C++-аддоны (например, `bcrypt`, `sharp`, пакеты, зависящие от `node-gyp`). Этот шаг устанавливает несколько гигабайт инструментов — пропустите его, если вам нужны только чистые JavaScript-пакеты.
  7. Нажмите Install, затем Finish.

Инсталлятор автоматически регистрирует `node.exe` и `npm.cmd` в системной переменной окружения `PATH` в разделе `C:Program Filesnodejs`.

Что инсталлятор на самом деле делает с вашей системой

Понимание побочных эффектов поможет избежать проблем при отладке в будущем:

  • Добавляет `C:Program Filesnodejs` в системный PATH (доступен всем пользователям).
  • Создаёт `C:Users<username>AppDataRoamingnpm` как префикс глобальных пакетов по умолчанию.
  • Регистрирует Node.js в реестре Windows в разделе `HKLMSOFTWARENode.js`.
  • Устанавливает `npx` (средство запуска пакетов NPM) вместе с `npm`.

Шаг 3: Проверка установки

Откройте новое окно командной строки или PowerShell. Слово «новое» здесь принципиально важно — существующие сеансы терминала кешируют старый PATH и не отразят изменения, внесённых инсталлятором.

“`

node -v

“`

Ожидаемый вывод: `v20.14.0` (или ваша установленная версия)

“`

npm -v

“`

Ожидаемый вывод: `10.x.x`

“`

npx -v

“`

Ожидаемый вывод: совпадает или близок к версии npm

Если `node` не распознаётся, PATH не был обновлён корректно. Исправьте это вручную:

  1. Откройте Свойства системы > Дополнительно > Переменные среды.
  2. В разделе Системные переменные найдите `Path` и нажмите Изменить.
  3. Добавьте `C:Program Filesnodejs`, если он отсутствует.
  4. Нажмите OK, закройте все окна терминала и откройте заново.

Диагностика распространённых проблем после установки

Проблема: `npm` распознаётся, но `node` — нет (или наоборот).

Причина: Неполная запись PATH или конфликтующая установка из Chocolatey или предыдущей настройки NVM.

Решение: Выполните `where node` и `where npm`, чтобы определить, какие бинарные файлы используются. Удалите устаревшие записи.

Проблема: Ошибки прав доступа `EACCES` при выполнении `npm install -g`.

Причина: Каталог глобального префикса не имеет прав на запись для текущего пользователя.

Решение: Измените глобальный префикс на каталог, принадлежащий пользователю (описано в шаге 5).

Проблема: `node` открывает Microsoft Store вместо запуска Node.js.

Причина: Windows 10/11 поставляется с псевдонимом выполнения приложения для `node`, который перенаправляет в Store.

Решение: Перейдите в Параметры > Приложения > Псевдонимы выполнения приложений и отключите псевдонимы для `python.exe` и `node.exe` (если они присутствуют).

Шаг 4: Обновление NPM до последней версии

Версия NPM, поставляемая с инсталлятором Node.js, как правило, отстаёт от текущего выпуска на одну-две минорные версии. Обновите её сразу после установки:

“`

npm install -g npm@latest

“`

Флаг `-g` устанавливает пакет в каталог глобального префикса, делая его доступным для всей системы. После обновления повторно проверьте версию:

“`

npm -v

“`

Важный граничный случай: В Windows глобальное обновление NPM иногда может оставить устаревший `npm.cmd` в `C:Program Filesnodejs`, указывающий на старую версию, тогда как новая версия установлена в `C:Users<username>AppDataRoamingnpm`. Если `npm -v` по-прежнему показывает старую версию после обновления, проверьте, какой бинарный файл стоит первым в PATH:

“`

where npm

“`

Путь в разделе `AppDataRoamingnpm` должен стоять перед `C:Program Filesnodejs` в выводе. Если это не так, измените порядок записей PATH соответствующим образом.

Шаг 5: Настройка NPM для вашей среды

Конфигурация NPM хранится в файле `.npmrc`, который может существовать на трёх уровнях: для проекта, для пользователя (`C:Users<username>.npmrc`) и глобально (`C:Program Filesnodejsnode_modulesnpmnpmrc`). Настройки проекта переопределяют пользовательские, которые в свою очередь переопределяют глобальные.

Изменение глобального префикса пакетов

Глобальный префикс по умолчанию (`AppDataRoamingnpm`) подходит большинству пользователей, но на общих серверах или при наличии квот на дисковое пространство вы можете перенаправить его:

“`

npm config set prefix "D:NodeGlobal"

“`

После изменения префикса добавьте новый подкаталог `bin` в PATH:

“`

setx PATH "%PATH%;D:NodeGlobal"

“`

Настройка приватного или зеркального реестра

Корпоративные среды и изолированные серверы часто используют приватный NPM-реестр (Verdaccio, Nexus, Artifactory):

“`

npm config set registry "https://your-private-registry.example.com/"

“`

Для аутентификации в приватном реестре:

“`

npm login –registry=https://your-private-registry.example.com/

“`

Для пакетов с ограниченной областью видимости (например, `@mycompany/*`) можно направить только эту область в приватный реестр, оставив публичный реестр нетронутым:

“`

npm config set @mycompany:registry "https://your-private-registry.example.com/"

“`

Настройка HTTP-прокси

Если ваша машина с Windows находится за корпоративным прокси:

“`

npm config set proxy "http://proxy.company.com:8080"

npm config set https-proxy "http://proxy.company.com:8080"

“`

Просмотр всех текущих настроек

“`

npm config list

npm config list –json

“`

Флаг `–json` выводит конфигурацию в машиночитаемом формате, что удобно для скриптов и диагностики CI/CD-пайплайнов.

Справочник по полезным настройкам NPM

Ключ конфигурацииЗначение по умолчаниюНазначение
`prefix``%APPDATA%npm`Расположение глобальных пакетов
`registry``https://registry.npmjs.org/`Реестр источников пакетов
`cache``%APPDATA%npm-cache`Каталог локального кеша пакетов
`save-exact``false`Фиксировать точные версии в `package.json`
`fund``true`Показывать сообщения о финансировании после установки
`audit``true`Выполнять аудит безопасности при установке

Шаг 6: Создание и запуск приложения Node.js

Инициализация проекта

“`

mkdir my-node-app

cd my-node-app

npm init -y

“`

`npm init -y` генерирует `package.json` со значениями по умолчанию, основанными на имени каталога и вашей конфигурации пользователя NPM. Файл `package.json` является манифестом вашего приложения — он определяет точку входа, скрипты, зависимости и метаданные.

Создание базового HTTP-сервера

Создайте `app.js` в каталоге проекта:

“`javascript

// app.js

const http = require('http');

const hostname = '127.0.0.1';

const port = 3000;

const server = http.createServer((req, res) => {

res.statusCode = 200;

res.setHeader('Content-Type', 'text/plain');

res.end('Hello, World!n');

});

server.listen(port, hostname, () => {

console.log(`Server running at http://${hostname}:${port}/`);

});

“`

Запустите его:

“`

node app.js

“`

Перейдите по адресу `http://127.0.0.1:3000/` в браузере. Вы должны увидеть `Hello, World!`.

Техническое примечание: Node.js использует однопоточный цикл событий на основе libuv для операций ввода-вывода. Обратный вызов `http.createServer` срабатывает при каждом входящем запросе, не блокируя цикл. Эта архитектура делает Node.js высокоэффективным для задач, ограниченных вводом-выводом, но непригодным для ресурсоёмких вычислительных задач без использования рабочих потоков или дочерних процессов.

Добавление фреймворка Express

Express — это стандартный HTTP-фреймворк для Node.js, предоставляющий маршрутизацию, поддержку промежуточного программного обеспечения и удобную абстракцию запросов/ответов:

“`

npm install express

“`

Это устанавливает Express локально (в `node_modules/`) и записывает его как зависимость в `package.json`. Обновите `app.js`:

“`javascript

const express = require('express');

const app = express();

const port = 3000;

app.get('/', (req, res) => {

res.send('Hello from Express!');

});

app.listen(port, () => {

console.log(`Server running at http://localhost:${port}`);

});

“`

“`

node app.js

“`

Перейдите по адресу `http://localhost:3000/`, чтобы подтвердить ответ.

Понимание `node_modules` и `.gitignore`

Каталог `node_modules` может содержать сотни мегабайт файлов. Никогда не добавляйте его в систему контроля версий. Создайте файл `.gitignore`:

“`

node_modules/

.env

“`

Коллеги и пайплайны развёртывания восстанавливают зависимости, выполняя `npm install`, который читает `package.json` и `package-lock.json` для воспроизведения точного дерева зависимостей.

Шаг 7: Управление пакетами — локальные и глобальные

Понимание различия между локальной и глобальной установкой пакетов — один из наиболее распространённых источников путаницы для новичков в Node.js.

ОбластьКоманда установкиРасположениеСценарий использования
**Локальная**`npm install <pkg>``./node_modules/`Зависимости приложения
**Локальная для разработки**`npm install –save-dev <pkg>``./node_modules/`Инструменты сборки, тестовые фреймворки
**Глобальная**`npm install -g <pkg>``%APPDATA%npm`CLI-инструменты (например, `nodemon`, `pm2`)

Ключевое правило: Если пакет предоставляет инструмент командной строки, который должен быть доступен везде (например, `nodemon`, `eslint`, `typescript`), устанавливайте его глобально. Если это библиотека, которую ваше приложение импортирует с помощью `require()` или `import`, устанавливайте её локально.

Запуск приложений в продакшене с PM2

Для любого приложения Node.js, развёрнутого на сервере — будь то экземпляр VPS Хостинга или Выделенного сервера — запуска `node app.js` напрямую недостаточно. Процесс завершится, если закрыть терминал или возникнет необработанное исключение.

PM2 — стандартный менеджер процессов для Node.js в продакшене:

“`

npm install -g pm2

pm2 start app.js –name "my-app"

pm2 startup

pm2 save

“`

`pm2 startup` генерирует команду для настройки PM2 на автоматический перезапуск приложения при перезагрузке системы. `pm2 save` сохраняет текущий список процессов.

Шаг 8: Усиление безопасности и аудит

Запуск аудита зависимостей

“`

npm audit

“`

NPM сверяет установленные пакеты с базой данных GitHub Advisory Database. Все известные уязвимости выводятся с уровнями серьёзности (низкий, умеренный, высокий, критический) и путями устранения.

“`

npm audit fix

“`

Это автоматически обновляет уязвимые пакеты до ближайшей исправленной версии без нарушения обратной совместимости. При наличии критических изменений изучите вывод и обновите вручную.

Фиксация версий зависимостей

В `package.json` NPM по умолчанию использует диапазоны семантического версионирования (`^1.2.3` допускает минорные и патч-обновления). В продакшене фиксируйте точные версии, чтобы избежать неожиданностей в цепочке поставок:

“`

npm config set save-exact true

“`

Или вручную замените префиксы `^` точными строками версий в `package.json` и зафиксируйте файл `package-lock.json`.

Избегайте запуска NPM с правами администратора

Запуск `npm install -g` с повышенными привилегиями создаёт файлы, принадлежащие учётной записи администратора, что может вызвать ошибки прав доступа при последующих операциях без повышения привилегий. Настройте глобальный префикс, принадлежащий пользователю (см. шаг 5), чтобы полностью исключить необходимость в повышенных привилегиях.

Развёртывание приложений Node.js на сервере

Локальная разработка — лишь первый этап. Производственное развёртывание предъявляет дополнительные требования: управление процессами, обратное проксирование, завершение TLS и управление переменными окружения.

Типичный производственный стек на Linux-VPS Хостинге сочетает Node.js с Nginx в качестве обратного прокси. Nginx выполняет завершение TLS (используя сертификаты от провайдера, например SSL-сертификаты) и перенаправляет запросы к процессу Node.js, прослушивающему локальный порт.

Для команд, предпочитающих управляемую среду с панелью управления, VPS с cPanel предоставляет управление приложениями Node.js через интерфейс cPanel, упрощая развёртывание без необходимости прямой настройки через SSH.

Конфигурация, специфичная для среды (учётные данные базы данных, API-ключи, номера портов), никогда не должна быть жёстко закодирована. Используйте файл `.env` с пакетом `dotenv`:

“`

npm install dotenv

“`

“`javascript

require('dotenv').config();

const port = process.env.PORT || 3000;

“`

Матрица решений: когда использовать каждый метод установки

СценарийРекомендуемый подход
Один проект, изучение Node.jsMSI-инсталлятор, LTS-версия
Несколько проектов с разными версиями Node.jsnvm-for-windows
CI/CD-пайплайн на Windows ServerMSI-инсталлятор или Chocolatey (`choco install nodejs-lts`)
Производственный Linux-серверМенеджер пакетов (apt/yum) или nvm
Контейнеризованное приложениеОфициальный Docker-образ `node`
Изолированная корпоративная средаОфлайн MSI + приватный NPM-реестр (Verdaccio)

Ключевые технические выводы

  • Всегда устанавливайте версию LTS для производственных и командных сред. Используйте ветку Current только тогда, когда требуется конкретная функция V8 или API Node.js.
  • Используйте nvm-for-windows в любой среде, где должны сосуществовать несколько версий Node.js.
  • Проверяйте контрольную сумму SHA-256 инсталлятора перед его запуском.
  • Измените глобальный префикс NPM на каталог, принадлежащий пользователю, чтобы избежать ошибок прав доступа и исключить необходимость в повышенных привилегиях.
  • Никогда не добавляйте `node_modules/` в систему контроля версий. Всегда фиксируйте `package-lock.json`.
  • Выполняйте `npm audit` после каждого `npm install` в производственных пайплайнах.
  • Используйте PM2 для управления процессами при любом серверном развёртывании — никогда не запускайте `node app.js` напрямую в продакшене.
  • Выполняйте завершение TLS на уровне обратного прокси (Nginx, Caddy), а не внутри процесса Node.js — это обеспечивает лучшую производительность и управление сертификатами.
  • Храните секреты в переменных окружения, загружаемых через `dotenv`, но никогда в исходном коде.

Часто задаваемые вопросы

В чём разница между Node.js LTS и Current на Windows?

LTS-версии получают патчи безопасности и стабильности в течение 30 месяцев и имеют чётные номера мажорных версий (18, 20, 22). Current-версии включают новейшие функции языка и среды выполнения, но поддерживаются только шесть месяцев, после чего переходят в статус LTS или снимаются с поддержки. Для производственных развёртываний на Windows всегда используйте LTS.

Почему `npm install -g` завершается с ошибкой прав доступа на Windows?

Глобальный префикс по умолчанию (`C:Users<username>AppDataRoamingnpm`) иногда не имеет прав на запись из-за политик UAC или предыдущих установок, выполненных от имени администратора. Решение — либо запустить терминал от имени администратора (не рекомендуется в долгосрочной перспективе), либо перенастроить глобальный префикс на каталог, которым владеет ваша учётная запись, с помощью `npm config set prefix "C:yourpath"`.

Можно ли одновременно запускать несколько версий Node.js на Windows?

Да, с помощью nvm-for-windows. Установите его, затем используйте `nvm install <version>` и `nvm use <version>` для переключения активной среды выполнения. Каждая версия поддерживает собственный каталог глобальных пакетов, что предотвращает конфликты между версиями.

Что такое `package-lock.json` и нужно ли его фиксировать в системе контроля версий?

`package-lock.json` — это точная детерминированная запись всего дерева зависимостей, разрешённого в процессе `npm install`. Он гарантирует, что каждый разработчик и каждый запуск CI/CD устанавливают идентичные версии пакетов. Всегда фиксируйте его в системе контроля версий и никогда не редактируйте вручную.

Как настроить автоматический запуск приложения Node.js при старте Windows без сервера?

Для машин разработки используйте PM2 с `pm2 startup` и `pm2 save`. Для интеграции со службами Windows такие инструменты, как `node-windows`, оборачивают процесс Node.js в нативную службу Windows, обеспечивая управление через оснастку MMC «Службы» и автоматический перезапуск при сбое или перезагрузке.

15%

Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код:

Skills
Начать