Як встановити та налаштувати 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 (довгострокова підтримка)** | Висока | Продакшн-навантаження, командні середовища | 30 місяців |
|---|
| **Current** | Помірна | Доступ до новітніх функцій рушія V8 | 6 місяців |
|---|
| **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
- Перейдіть на офіційний сайт Node.js за адресою nodejs.org.
- Виберіть вкладку LTS і завантажте Windows Installer (`.msi`) для вашої архітектури. Майже всі сучасні машини з Windows є 64-розрядними (`node-v20.x.x-x64.msi`). Збірки ARM64 доступні для пристроїв Windows on ARM.
- Перевірте контрольну суму SHA-256 завантаженого файлу, порівнявши її зі значеннями, опублікованими на сторінці завантажень Node.js, перед запуском інсталятора. Цей крок є обов’язковим у будь-якому середовищі, де приділяється увага безпеці.
Щоб перевірити контрольну суму в PowerShell:
“`powershell
Get-FileHash .node-v20.14.0-x64.msi -Algorithm SHA256
“`
Порівняйте результат із опублікованим хешем. Розбіжність вказує на пошкоджене або підмінене завантаження.
Крок 2: Встановлення Node.js і NPM
- Двічі клацніть завантажений файл `.msi`, щоб запустити майстер встановлення.
- Натисніть Next на екрані привітання.
- Прийміть ліцензійну угоду кінцевого користувача та натисніть Next.
- Шлях встановлення за замовчуванням — `C:Program Filesnodejs`. Якщо у вас немає конкретної причини для його зміни (наприклад, несистемний диск для керування дисковим простором), залиште його без змін.
- На екрані Custom Setup переконайтеся, що вибрано npm package manager. Він увімкнений за замовчуванням.
- На екрані Tools for Native Modules ви побачите опцію автоматичного встановлення Chocolatey, Python і Visual Studio Build Tools. Встановіть цей прапорець, якщо плануєте встановлювати NPM-пакети, що містять нативні C++ додатки (наприклад, `bcrypt`, `sharp`, пакети, що залежать від `node-gyp`). Цей крок встановлює кілька гігабайт інструментів — пропустіть його, якщо вам потрібні лише чисто JavaScript-пакети.
- Натисніть 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 не було оновлено коректно. Виправте це вручну:
- Відкрийте Властивості системи > Додатково > Змінні середовища.
- У розділі Системні змінні знайдіть `Path` і натисніть Змінити.
- Додайте `C:Program Filesnodejs`, якщо його немає.
- Натисніть 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 надзвичайно ефективним для навантажень, обмежених вводом/виводом, але непридатним для CPU-інтенсивних завдань без робочих потоків або дочірніх процесів.
Додавання фреймворку 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.js | MSI-інсталятор, LTS-версія |
|---|
| Кілька проєктів із різними версіями Node.js | nvm-for-windows |
|---|
| CI/CD-пайплайн на Windows Server | MSI-інсталятор або 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 служб і автоматичний перезапуск при збої або перезавантаженні.
