npm (Node Package Manager) — стандартний менеджер пакетів для платформи Node.js, що входить до комплекту встановлення Node.js. npm керує залежностями проектів JavaScript та TypeScript: встановлює бібліотеки в node_modules, оновлює версії пакетів, вирішує конфлікти версій. package.json — центральний конфігураційний файл з метаданими та списком залежностей. npm Registry — найбільший реєстр пакетів. Детальніше — на npm Registry.
Головне
npm був створений у 2010 році Айзеком Шлютером як рішення для керування залежностями Node.js. З 2014 року npm керується компанією npm, Inc., придбаною Microsoft/GitHub у 2020. Інструмент складається з двох частин: CLI (командний рядок) для встановлення та керування пакетами, та Registry — центрального репозиторію всіх опублікованих модулів за адресою registry.npmjs.org.
npm Registry — найбільший реєстр пакетів: понад 2 мільйони пакетів та понад 10 мільярдів завантажень щомісяця. Кожен пакет має версію SemVer, опис, залежності, ліцензію та авторство. Публікація власного пакета виконується через npm publish. npm підтримує scoped-пакети для організацій (@scope/package), приватні реєстри та вбудований аудит безпеки.
Node.js версії 18+ включає npm 9+ з покращеною продуктивністю, workspaces для монорепозиторіїв та переробленим механізмом peer dependencies. Екосистема npm охоплює серверний JavaScript, фронтенд (React, Vue, Angular), мобільну розробку (React Native), інструменти збірки (Webpack, Vite) та CLI-утиліти. npm — основний канал поширення бібліотек JavaScript.
npm install — головна команда, що читає package.json та package-lock.json для встановлення всіх залежностей у node_modules. При першому запуску npm обчислює граф залежностей, вирішує конфлікти версій та генерує package-lock.json. Команда npm install <package> встановлює конкретний пакет; прапорець --save-dev додає його до devDependencies, --global — глобально.
npx — виконавець пакетів, що входить до npm з версії 5.2. npx дозволяє запускати CLI-утиліти без глобального встановлення: npx react-native init або npx create-react-app my-app. npx завантажує пакет у тимчасовий кеш, запускає, а після завершення очищає його. npx також корисний для запуску конкретних версій інструментів.
npm audit сканує дерево залежностей на відомі вразливості з бази npm. Команда виводить звіт з рівнями критичності (critical, high, moderate) та рекомендує npm audit fix для автоматичного оновлення вразливих пакетів. npm cache зберігає завантажені пакети локально. npm cache clean --force очищає кеш при проблемах зі встановленням. npm outdated показує застарілі пакети.
# Основні команди npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Запуск без глобального встановлення
$ npx react-native init MyApp
# Аудит безпеки
$ npm audit --fix
package.json — це JSON-файл у корені проекту, який описує його метадані, залежності та конфігурацію. Обов'язкові поля: name (унікальне ім'я пакета) та version (версія SemVer, наприклад 1.0.0). Файл створюється командою npm init -y для швидкої ініціалізації або вручну.
Semantic Versioning (SemVer) — стандарт версіонування у форматі MAJOR.MINOR.PATCH. Мажорна версія змінюється при несумісних змінах API, мінорна — при додаванні функціоналу (зворотно сумісно), патч — при виправленні багів. Символ ^ перед версією дозволяє оновлення мінорної та патч-версій, ~ — тільки патч-версії.
{
"name": "my-app",
"version": "1.0.0",
"private": true,
"scripts": {
"start": "expo start",
"android": "expo start --android",
"ios": "expo start --ios"
},
"dependencies": {
"react": "^18.3.0",
"react-native": "^0.76.0"
},
"devDependencies": {
"typescript": "^5.5.0",
"@types/react": "^18.3.0"
}
}
| Поле | Призначення | Приклад значення |
|---|---|---|
| scripts | Команди запуску для npm run | "start": "node index.js" |
| dependencies | Production-залежності додатку | "react": "^18.3.0" |
| devDependencies | Інструменти розробки та тестування | "jest": "^29.7.0" |
| peerDependencies | Хост-залежності для бібліотек | "react": ">=17.0.0" |
| engines | Вимоги до версій Node.js | {"node": ">=18.0.0"} |
Проекти React Native активно використовують npm для керування залежностями. Стандартний набір включає react, react-native, бібліотеки навігації (React Navigation), HTTP-запитів (axios), керування станом (Redux, Zustand) та UI-компонентів. npm дозволяє встановлювати тисячі сумісних пакетів з реєстру.
npx pod-install — обов'язкова команда після встановлення нативних модулів у React Native для iOS. npm автоматично генерує Podfile.lock на основі package-lock.json. У Expo-проектах використовується expo install замість npm install, оскільки він підбирає версії, сумісні з поточною версією Expo SDK.
Конфлікти версій — часта проблема React Native: react-native-reanimated, react-native-gesture-handler та react-native-safe-area-context вимагають узгоджених версій. Рішення — оновити всі пакети до останніх сумісних версій або використовувати --legacy-peer-deps. package-lock.json критичний для нативних модулів, що компілюються через CocoaPods та Gradle.
npm — стандартний менеджер пакетів, що входить до Node.js. Основні альтернативи: yarn (створений Facebook у 2016) та pnpm (швидкий, з жорсткими посиланнями). Починаючи з npm 5, різниця у швидкості та функціоналі між npm та yarn мінімальна. npm 7+ додав workspaces, що робить його конкурентоспроможним для монорепозиторіїв.
| Характеристика | npm | yarn | pnpm |
|---|---|---|---|
| Рік створення | 2010 | 2016 | 2017 |
| Lock-файл | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Встановлення | Послідовне (npm 5+) | Паралельне | Паралельне |
| Дисковий простір | Стандартний | Стандартний | Мінімальний (посилання) |
| Workspaces | Так (npm 7+) | Так | Так |
| Plug'n'Play | Ні | Так | Ні |
За даними State of JS 2025: npm використовують 62% розробників, yarn — 35% (переважно старі проекти та прихильники PnP), pnpm — 3%. Для React Native проектів обидва інструменти рівноцінні, але npm частіше зустрічається в проектах на Expo SDK 50+ та нових ініціалізаціях React Native.
yarn зберігає перевагу в екстремально великих монорепозиторіях (100+ пакетів) завдяки більш зрілій реалізації workspaces та Plug'n'Play. pnpm виграє в економії дискового простору за рахунок жорстких посилань на глобальний стор. Вибір менеджера залежить від командних уподобань та інфраструктури.
Часто задавані питання
npm install оновлює package-lock.json і може встановлювати нові мінорні версії в межах семантичного діапазону. npm ci (Clean Install) видаляє node_modules і встановлює пакети строго за package-lock.json без його оновлення. npm ci швидше, використовується в CI/CD та гарантує ідентичне середовище на всіх машинах. Якщо package-lock.json відсутній, npm ci видає помилку.
Починаючи з npm 7, конфлікти peer dependencies викликають помилку збірки. Рішення: оновити всі пакети до сумісних версій через npm update, використати прапорець --legacy-peer-deps для режиму npm 6, або додати секцію overrides в package.json для примусової фіксації версії конкретного пакета. Найкращий варіант — оновити залежності до сумісних версій.
npm audit сканує дерево залежностей на відомі вразливості з бази npm Security Advisory. Команда виводить звіт з рівнем критичності (critical, high, moderate, low) та рекомендує npm audit fix для автоматичного оновлення вразливих пакетів до безпечних версій. Регулярний запуск npm audit — базова практика безпеки JavaScript проектів.
npm workspaces дозволяють керувати кількома пакетами в одному репозиторії. Додайте поле "workspaces": ["packages/*"] у кореневий package.json. Переваги: єдине встановлення всіх залежностей у спільний node_modules, автоматичні симлінки між локальними пакетами, запуск скриптів для всіх пакетів з кореня, усунення дублювання версій.
package-lock.json фіксує точні версії всіх залежностей та їх транзитивних пакетів. Без нього різні розробники та CI-сервери можуть отримати різні версії бібліотек в межах семантичного діапазону, що призводить до помилок «на моїй машині працює». Коміт lock-файлу гарантує відтворювані збірки та ідентичну поведінку на всіх середовищах.
Підсумки
Ми розробимо мобільний застосунок під ключ
IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.