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 года. Мы проконсультируем вас и предложим наилучшее решение.