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 г. от Isaac Schlueter като решение за управление на зависимости на 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, frontend (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"
dependenciesПроизводствени зависимости на приложението"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, автоматични симлинкове между локални пакети, стартиране на скриптове за всички пакети от корена, премахване на дублиране на версии.

Защо да се commit-ва package-lock.json в хранилището?

package-lock.json фиксира точните версии на всички зависимости и техните транзитивни пакети. Без него различни разработчици и CI сървъри могат да получат различни версии на библиотеки в рамките на семантичния обхват, което води до грешки „на моята машина работи“. Commit-ването на 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също