npm: основы, менеджер пакетов для React Native и Node.js

Автор: IT Sectr Опубликовано: 2026-02-13 Время чтения: 10 мин

npm (Node Package Manager) — стандартный менеджер пакетов для платформы Node.js, входящий в комплект установки Node.js. npm управляет зависимостями JavaScript и TypeScript проектов: устанавливает библиотеки в node_modules, обновляет версии пакетов, разрешает конфликты версий. package.json — центральный конфигурационный файл с метаданными и списком зависимостей. npm Registry — крупнейший реестр пакетов. Подробнее — на npm Registry.

Главное

  • npm — стандартный менеджер пакетов Node.js, входящий в установку Node.js с версии 0.6.3
  • package.json — конфигурационный файл проекта с зависимостями, скриптами и метаданными
  • npm install — базовая команда установки зависимостей из package.json в папку node_modules
  • package-lock.json — файл фиксации точных версий для воспроизводимых установок на всех окружениях
  • npm ci — команда для CI/CD, устанавливающая пакеты строго по lock-файлу без его обновления

Что такое npm — менеджер пакетов Node.js?

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

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 показывает устаревшие пакеты.

bash
# Основные команды npm
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Запуск без глобальной установки
$ npx react-native init MyApp
# Аудит безопасности
$ npm audit --fix

Структура package.json и управление зависимостями

package.json — это JSON-файл в корне проекта, который описывает его метаданные, зависимости и конфигурацию. Обязательные поля: name (уникальное имя пакета) и version (SemVer-версия, например 1.0.0). Файл создаётся командой npm init -y для быстрой инициализации или вручную.

Semantic Versioning (SemVer) — стандарт версионирования MAJOR.MINOR.PATCH. Мажорная версия меняется при несовместимых изменениях API, минорная — при добавлении функционала (обратно совместимо), патч — при исправлении багов. Символ ^ перед версией разрешает обновления минорной и патч-версий, ~ — только патч-версии.

json
{
  "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"
dependenciesProduction-зависимости приложения"react": "^18.3.0"
devDependenciesИнструменты разработки и тестирования"jest": "^29.7.0"
peerDependenciesХост-зависимости для библиотек"react": ">=17.0.0"
enginesТребования к версиям Node.js{"node": ">=18.0.0"}

npm в разработке React Native

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 с альтернативными менеджерами

npm — стандартный менеджер пакетов, входящий в Node.js. Основные альтернативы: yarn (создан Facebook в 2016) и pnpm (быстрый, с жёсткими ссылками). Начиная с npm 5, разница в скорости и функционале между npm и yarn минимальна. npm 7+ добавил workspaces, что делает его конкурентоспособным для монорепозиториев.

Характеристикаnpmyarnpnpm
Год создания201020162017
Lock-файлpackage-lock.jsonyarn.lockpnpm-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 от npm ci?

npm install обновляет package-lock.json и может устанавливать новые минорные версии в пределах семантического диапазона. npm ci (Clean Install) удаляет node_modules и устанавливает пакеты строго по package-lock.json без его обновления. npm ci быстрее, используется в CI/CD и гарантирует идентичную среду на всех машинах. Если package-lock.json отсутствует, npm ci выдаёт ошибку.

Как исправить конфликты peer dependencies в npm?

Начиная с npm 7, конфликты peer dependencies вызывают ошибку сборки. Решения: обновить все пакеты до совместимых версий через npm update, использовать флаг --legacy-peer-deps для режима npm 6, или добавить секцию overrides в package.json для принудительной фиксации версии конкретного пакета. Лучший вариант — обновить зависимости до совместимых версий.

Что такое npm audit и зачем он нужен?

npm audit сканирует дерево зависимостей на известные уязвимости из базы npm Security Advisory. Команда выводит отчёт с уровнем критичности (critical, high, moderate, low) и рекомендует npm audit fix для автоматического обновления уязвимых пакетов до безопасных версий. Регулярный запуск npm audit — базовая практика безопасности JavaScript проектов.

Как npm workspaces упрощают монорепозитории?

npm workspaces позволяют управлять несколькими пакетами в одном репозитории. Добавьте поле "workspaces": ["packages/*"] в корневой package.json. Преимущества: единая установка всех зависимостей в общую node_modules, автоматические симлинки между локальными пакетами, запуск скриптов для всех пакетов из корня, устранение дублирования версий.

Зачем коммитить package-lock.json в репозиторий?

package-lock.json фиксирует точные версии всех зависимостей и их транзитивных пакетов. Без него разные разработчики и CI-серверы могут получить разные версии библиотек в пределах семантического диапазона, что приводит к ошибкам «на моей машине работает». Коммит lock-файла гарантирует воспроизводимые сборки и идентичное поведение на всех окружениях.

Итоги

  • npm — стандартный менеджер пакетов Node.js, входящий в состав установки Node.js с версии 0.6.3
  • package.json — конфигурационный файл проекта с зависимостями, скриптами и метаданными
  • npm install — установка зависимостей, npm ci — фиксация по package-lock.json для CI/CD
  • package-lock.json — фиксация точных версий, обязателен для воспроизводимых сборок
  • npm Registry — крупнейший реестр пакетов с более чем 2 миллионами модулей
  • npm audit — проверка безопасности зависимостей с автоматическим исправлением уязвимостей
  • npm workspaces — механизм управления монорепозиториями с общими node_modules

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

Читайте также