npm (Node Package Manager) — Node.js platforması üçün standart paket meneceri, Node.js quraşdırmasına daxildir. npm JavaScript və TypeScript layihələrinin asılılıqlarını idarə edir: kitabxanaları node_modules qovluğuna quraşdırır, paket versiyalarını yeniləyir, versiya konfliktlərini həll edir. package.json — metadata və asılılıq siyahısı ilə mərkəzi konfiqurasiya faylı. npm Registry — ən böyük paket reyestri. Ətraflı npm Registry saytında.
Əsas məqamlar
npm 2010-cu ildə Isaac Schlueter tərəfindən Node.js asılılıqlarının idarə edilməsi üçün yaradılmışdır. 2014-cü ildən npm, Inc. şirkəti tərəfindən idarə olunur, 2020-ci ildə Microsoft/GitHub tərəfindən satın alınmışdır. Alət iki hissədən ibarətdir: paketləri quraşdırmaq və idarə etmək üçün CLI (komanda sətri) və bütün nəşr olunmuş modulların mərkəzi deposu olan Registry — registry.npmjs.org ünvanında.
npm Registry — ən böyük paket reyestri: 2 milyondan çox paket və aylıq 10 milyarddan çox yükləmə. Hər paketin SemVer versiyası, təsviri, asılılıqları, lisenziyası və müəllifliyi var. Öz paketinizi nəşr etmək npm publish vasitəsilə həyata keçirilir. npm təşkilatlar üçün scoped paketləri (@scope/package), özəl reyestrləri və daxili təhlükəsizlik auditi dəstəkləyir.
Node.js 18+ versiyası təkmilləşdirilmiş performans, monorepolarlar üçün workspaces və yenidən işlənmiş peer dependencies mexanizmi ilə npm 9+ daxildir. npm ekosistemi server tərəfi JavaScript, frontend (React, Vue, Angular), mobil inkişaf (React Native), qurma alətləri (Webpack, Vite) və CLI yardımçı proqramlarını əhatə edir. npm JavaScript kitabxanalarının əsas paylama kanalıdır.
npm install — bütün asılılıqları node_modules qovluğuna quraşdırmaq üçün package.json və package-lock.json-ı oxuyan əsas əmr. İlk işə salındıqda npm asılılıq qrafını hesablayır, versiya konfliktlərini həll edir və package-lock.json yaradır. npm install <package> əmri konkret paketi quraşdırır; --save-dev bayrağı devDependencies-ə, --global isə qlobal olaraq əlavə edir.
npx — npm-in 5.2 versiyasından daxil olan paket icraçısı. npx CLI alətlərini qlobal quraşdırma olmadan işə salmağa imkan verir: npx react-native init və ya npx create-react-app my-app. npx paketi müvəqqəti keşə endirir, işə salır və bitdikdən sonra təmizləyir. npx həmçinin alətlərin konkret versiyalarını işə salmaq üçün faydalıdır.
npm audit asılılıq ağacını npm bazasındakı məlum zəifliklər üçün skan edir. Əmr kritiklik səviyyələri (critical, high, moderate) ilə hesabat verir və həssas paketlərin avtomatik yenilənməsi üçün npm audit fix tövsiyə edir. npm cache endirilmiş paketləri lokal olaraq saxlayır. npm cache clean --force quraşdırma problemlərində keşi təmizləyir. npm outdated köhnəlmiş paketləri göstərir.
# npm-in əsas əmrləri
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Qlobal quraşdırma olmadan işə salma
$ npx react-native init MyApp
# Təhlükəsizlik auditi
$ npm audit --fix
package.json — layihənin kök qovluğunda metadata, asılılıqlar və konfiqurasiyanı təsvir edən JSON faylıdır. Məcburi sahələr: name (paketin unikal adı) və version (SemVer versiyası, məs. 1.0.0). Fayl sürətli inisializasiya üçün npm init -y əmri ilə və ya əl ilə yaradılır.
Semantic Versioning (SemVer) — MAJOR.MINOR.PATCH versiyalaşdırma standartı. Əsas versiya API-də uyğun olmayan dəyişikliklər zamanı, kiçik versiya — funksionallıq əlavə edildikdə (geri uyğun), yamaq — səhvlər düzəldildikdə dəyişir. Versiyadan əvvəl ^ simvolu kiçik və yamaq versiyalarının yenilənməsinə, ~ isə yalnız yamaq versiyasına icazə verir.
{
"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"
}
}
| Sahə | Məqsəd | Nümunə dəyəri |
|---|---|---|
| scripts | npm run üçün işə salma əmrləri | "start": "node index.js" |
| dependencies | Tətbiqin istehsalat asılılıqları | "react": "^18.3.0" |
| devDependencies | İnkişaf və test alətləri | "jest": "^29.7.0" |
| peerDependencies | Kitabxanalar üçün host asılılıqları | "react": ">=17.0.0" |
| engines | Node.js versiya tələbləri | {"node": ">=18.0.0"} |
React Native layihələri asılılıqların idarə edilməsi üçün npm-dən fəal istifadə edir. Standart dəstə react, react-native, naviqasiya kitabxanaları (React Navigation), HTTP sorğuları (axios), vəziyyət idarəetməsi (Redux, Zustand) və UI komponentləri daxildir. npm reyestrdən minlərlə uyğun paket quraşdırmağa imkan verir.
npx pod-install — iOS üçün React Native-də yerli modulların quraşdırılmasından sonra məcburi əmr. npm package-lock.json əsasında Podfile.lock-u avtomatik yaradır. Expo layihələrində npm install əvəzinə expo install istifadə olunur, çünki o, cari Expo SDK versiyasına uyğun versiyaları seçir.
Versiya konfliktləri — React Native-də tez-tez rast gəlinən problem: react-native-reanimated, react-native-gesture-handler və react-native-safe-area-context uyğun versiyalar tələb edir. Həll yolu — bütün paketləri son uyğun versiyalara yeniləmək və ya --legacy-peer-deps istifadə etməkdir. package-lock.json CocoaPods və Gradle vasitəsilə kompilyasiya olunan yerli modullar üçün vacibdir.
npm — Node.js-ə daxil olan standart paket meneceri. Əsas alternativlər: yarn (2016-cı ildə Facebook tərəfindən yaradılıb) və pnpm (sürətli, sərt keçidlərlə). npm 5-dən etibarən npm və yarn arasında sürət və funksionallıq fərqi minimaldır. npm 7+ workspaces əlavə edib, bu da onu monorepolarlar üçün rəqabətədavamlı edir.
| Xüsusiyyət | npm | yarn | pnpm |
|---|---|---|---|
| Yaradılma ili | 2010 | 2016 | 2017 |
| Lock-fayl | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Quraşdırma | Ardıcıl (npm 5+) | Paralel | Paralel |
| Disk sahəsi | Standart | Standart | Minimal (keçidlər) |
| Workspaces | Bəli (npm 7+) | Bəli | Bəli |
| Plug'n'Play | Xeyr | Bəli | Xeyr |
State of JS 2025 məlumatlarına görə: npm-dən 62% tərtibatçı istifadə edir, yarn — 35% (əsasən köhnə layihələr və PnP pərəstişkarları), pnpm — 3%. React Native layihələri üçün hər iki alət ekvivalentdir, lakin npm Expo SDK 50+ və yeni React Native inisializasiyalarında daha çox rast gəlinir.
yarn workspaces və Plug'n'Play-in daha yetkin həyata keçirilməsi sayəsində həddindən artıq böyük monorepolarlarda (100+ paket) üstünlüyünü qoruyur. pnpm qlobal anbara sərt keçidlər hesabına disk sahəsinə qənaətdə qalib gəlir. Menecer seçimi komanda üstünlüklərindən və infrastrukturdan asılıdır.
Tez-tez verilən suallar
npm install package-lock.json-ı yeniləyir və semantik diapazon daxilində yeni kiçik versiyalar quraşdıra bilər. npm ci (Clean Install) node_modules-ı silir və paketləri package-lock.json-a uyğun olaraq yeniləmədən quraşdırır. npm ci daha sürətlidir, CI/CD-də istifadə olunur və bütün maşınlarda eyni mühiti təmin edir. package-lock.json yoxdursa, npm ci xəta verir.
npm 7-dən etibarən peer dependencies konfliktləri qurma xətasına səbəb olur. Həll yolları: bütün paketləri uyğun versiyalara npm update vasitəsilə yeniləmək, npm 6 rejimi üçün --legacy-peer-deps bayrağından istifadə etmək və ya konkret paketin versiyasını məcburi təsbit etmək üçün package.json-a overrides bölməsi əlavə etmək. Ən yaxşı variant — asılılıqları uyğun versiyalara yeniləməkdir.
npm audit asılılıq ağacını npm Security Advisory bazasındakı məlum zəifliklər üçün skan edir. Əmr kritiklik səviyyəsi (critical, high, moderate, low) ilə hesabat verir və həssas paketlərin təhlükəsiz versiyalara avtomatik yenilənməsi üçün npm audit fix tövsiyə edir. Müntəzəm npm audit işə salmaq JavaScript layihələrinin əsas təhlükəsizlik təcrübəsidir.
npm workspaces bir repozitoridə çoxsaylı paketləri idarə etməyə imkan verir. Kök package.json-a "workspaces": ["packages/*"] sahəsini əlavə edin. Üstünlükləri: bütün asılılıqların ümumi node_modules qovluğuna vahid quraşdırılması, lokal paketlər arasında avtomatik simlinklər, bütün paketlər üçün skriptlərin kökdən işə salınması, versiyaların təkrarlanmasının aradan qaldırılması.
package-lock.json bütün asılılıqların və onların tranzitiv paketlərinin dəqiq versiyalarını təsbit edir. Olmadan müxtəlif tərtibatçılar və CI serverləri semantik diapazon daxilində müxtəlif kitabxana versiyaları ala bilər ki, bu da «mənim maşınımda işləyir» səhvlərinə səbəb olur. Lock-faylın commit-i təkrarlanan qurma və bütün mühitlərdə eyni davranışı təmin edir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun