npm (Node Package Manager) — стандартният мениджър на пакети за платформата Node.js, включен в инсталационния пакет на Node.js. npm управлява зависимости на JavaScript и TypeScript проекти: инсталира библиотеки в node_modules, актуализира версии на пакети, разрешава конфликти на версии. package.json — централният конфигурационен файл с метаданни и списък на зависимости. npm Registry — най-големият регистър на пакети. Повече на npm Registry.
Основни точки
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 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 | Производствени зависимости на приложението | "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 сървъри могат да получат различни версии на библиотеки в рамките на семантичния обхват, което води до грешки „на моята машина работи“. Commit-ването на lock файла гарантира възпроизводими изграждания и идентично поведение във всички среди.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също