npm (Node Package Manager) — Node.js platformasi uchun standart paket menejeri, Node.js o'rnatish to'plamiga kiritilgan. npm JavaScript va TypeScript loyihalarining bog'liqliklarini boshqaradi: kutubxonalarni node_modules papkasiga o'rnatadi, paket versiyalarini yangilaydi, versiya konfliktlarini hal qiladi. package.json — metadata va bog'liqliklar ro'yxati bilan markaziy konfiguratsiya fayli. npm Registry — eng yirik paket reestri. Batafsil npm Registry da.
Asosiy ma'lumotlar
npm 2010-yilda Isaac Schlueter tomonidan Node.js bog'liqliklarini boshqarish uchun yaratilgan. 2014-yildan npm, Inc. kompaniyasi tomonidan boshqariladi, 2020-yilda Microsoft/GitHub tomonidan sotib olingan. Asbob ikki qismdan iborat: paketlarni o'rnatish va boshqarish uchun CLI (buyruq qatori) va barcha nashr etilgan modullarning markaziy ombori — Registry (registry.npmjs.org).
npm Registry — eng yirik paket reestri: 2 milliondan ortiq paket va oyiga 10 milliarddan ortiq yuklab olishlar. Har bir paket SemVer versiyasi, tavsifi, bog'liqliklari, litsenziyasi va muallifligiga ega. O'z paketingizni nashr qilish npm publish orqali amalga oshiriladi. npm tashkilotlar uchun scoped paketlarni (@scope/package), xususiy reestrlarni va ichki xavfsizlik auditini qo'llab-quvvatlaydi.
Node.js 18+ versiyasi yaxshilangan unumdorlik, monorepolarlar uchun workspaces va qayta ishlangan peer dependencies mexanizmi bilan npm 9+ ni o'z ichiga oladi. npm ekotizimi server tomoni JavaScript, frontend (React, Vue, Angular), mobil rivojlanish (React Native), qurish vositalari (Webpack, Vite) va CLI yordamchi dasturlarini qamrab oladi. npm JavaScript kutubxonalarining asosiy tarqatish kanalidir.
npm install — barcha bog'liqliklarni node_modules ga o'rnatish uchun package.json va package-lock.json ni o'qiydigan asosiy buyruq. Birinchi ishga tushirishda npm bog'liqlik grafigini hisoblab chiqadi, versiya konfliktlarini hal qiladi va package-lock.json yaratadi. npm install <package> buyrug'i ma'lum bir paketni o'rnatadi; --save-dev bayrog'i devDependencies ga, --global esa globalga qo'shadi.
npx — npm 5.2 versiyasidan kiritilgan paket ijrochisi. npx CLI vositalarini global o'rnatmasdan ishga tushirish imkonini beradi: npx react-native init yoki npx create-react-app my-app. npx paketni vaqtinchalik keshga yuklab oladi, ishga tushiradi va tugagach tozalaydi. npx shuningdek vositalarning ma'lum versiyalarini ishga tushirish uchun foydali.
npm audit bog'liqlik daraxtini npm ma'lumotlar bazasidagi ma'lum zaifliklar uchun skanerlaydi. Buyruq kritiklik darajalari (critical, high, moderate) bilan hisobot beradi va zaif paketlarni avtomatik yangilash uchun npm audit fix ni tavsiya qiladi. npm cache yuklab olingan paketlarni lokal saqlaydi. npm cache clean --force o'rnatish muammolarida keshni tozalaydi. npm outdated eskirgan paketlarni ko'rsatadi.
# npm-ning asosiy buyruqlari
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Global o'rnatmasdan ishga tushirish
$ npx react-native init MyApp
# Xavfsizlik auditi
$ npm audit --fix
package.json — loyihaning ildizidagi metadata, bog'liqliklar va konfiguratsiyani tavsiflovchi JSON fayli. Majburiy maydonlar: name (paketning noyob nomi) va version (SemVer versiyasi, mas. 1.0.0). Fayl tezkor inisializatsiya uchun npm init -y buyrug'i yoki qo'lda yaratiladi.
Semantic Versioning (SemVer) — MAJOR.MINOR.PATCH versiyalash standarti. Asosiy versiya API dagi mos kelmaydigan o'zgarishlarda, kichik versiya — funksionallik qo'shilganda (orqaga mos), yamoq — xatolar tuzatilganda o'zgaradi. ^ belgisi kichik va yamoq versiyalarini yangilashga, ~ esa faqat yamoq versiyasiga ruxsat beradi.
{
"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"
}
}
| Maydon | Maqsad | Misol qiymati |
|---|---|---|
| scripts | npm run uchun ishga tushirish buyruqlari | "start": "node index.js" |
| dependencies | Ilovaning ishlab chiqarish bog'liqliklari | "react": "^18.3.0" |
| devDependencies | Rivojlanish va test vositalari | "jest": "^29.7.0" |
| peerDependencies | Kutubxonalar uchun host bog'liqliklari | "react": ">=17.0.0" |
| engines | Node.js versiyasiga talablar | {"node": ">=18.0.0"} |
React Native loyihalari bog'liqliklarni boshqarish uchun npm-dan faol foydalanadi. Standart to'plamga react, react-native, navigatsiya kutubxonalari (React Navigation), HTTP so'rovlari (axios), holat boshqaruvi (Redux, Zustand) va UI komponentlari kiradi. npm reestrdan minglab mos paketlarni o'rnatish imkonini beradi.
npx pod-install — iOS uchun React Native da mahalliy modullarni o'rnatgandan so'ng majburiy buyruq. npm package-lock.json asosida Podfile.lock ni avtomatik yaratadi. Expo loyihalarida npm install o'rniga expo install ishlatiladi, chunki u joriy Expo SDK versiyasiga mos versiyalarni tanlaydi.
Versiya konfliktlari — React Native da tez-tez uchraydigan muammo: react-native-reanimated, react-native-gesture-handler va react-native-safe-area-context mos versiyalarni talab qiladi. Yechim — barcha paketlarni eng so'nggi mos versiyalarga yangilash yoki --legacy-peer-deps dan foydalanish. package-lock.json CocoaPods va Gradle orqali kompilyatsiya qilinadigan mahalliy modullar uchun muhimdir.
npm — Node.js ga kiritilgan standart paket menejeri. Asosiy muqobillar: yarn (2016 yilda Facebook tomonidan yaratilgan) va pnpm (tez, qattiq havolalar bilan). npm 5 dan boshlab npm va yarn o'rtasidagi tezlik va funksionallik farqi minimal. npm 7+ workspaces qo'shdi, bu uni monorepolarlar uchun raqobatbardosh qiladi.
| Xususiyat | npm | yarn | pnpm |
|---|---|---|---|
| Yaratilgan yil | 2010 | 2016 | 2017 |
| Lock-fayl | package-lock.json | yarn.lock | pnpm-lock.yaml |
| O'rnatish | Ketma-ket (npm 5+) | Parallel | Parallel |
| Disk maydoni | Standart | Standart | Minimal (havolalar) |
| Workspaces | Ha (npm 7+) | Ha | Ha |
| Plug'n'Play | Yo'q | Ha | Yo'q |
State of JS 2025 ma'lumotlariga ko'ra: npm dan 62% dasturchilar foydalanadi, yarn — 35% (asosan eski loyihalar va PnP muxlislari), pnpm — 3%. React Native loyihalari uchun ikkala vosita teng, ammo npm Expo SDK 50+ va yangi React Native inisializatsiyalarida ko'proq uchraydi.
yarn workspaces va Plug'n'Play ning yanada yetuk amalga oshirilishi tufayli juda katta monorepolarlarda (100+ paket) ustunlikni saqlaydi. pnpm global omborga qattiq havolalar hisobiga disk maydonini tejashda g'alaba qozonadi. Menejer tanlash jamoa afzalliklari va infratuzilmasiga bog'liq.
Tez-tez beriladigan savollar
npm install package-lock.json ni yangilaydi va semantik diapazon doirasida yangi kichik versiyalarni o'rnatishi mumkin. npm ci (Clean Install) node_modules ni o'chiradi va paketlarni package-lock.json ga qat'iy rioya qilgan holda yangilamasdan o'rnatadi. npm ci tezroq, CI/CD da ishlatiladi va barcha mashinalarda bir xil muhitni kafolatlaydi. Agar package-lock.json bo'lmasa, npm ci xatolik qaytaradi.
npm 7 dan boshlab peer dependencies konfliktlari qurish xatosiga sabab bo'ladi. Yechimlar: barcha paketlarni mos versiyalarga npm update orqali yangilash, npm 6 rejimi uchun --legacy-peer-deps bayrog'idan foydalanish yoki ma'lum bir paketning versiyasini majburiy fiksatsiya qilish uchun package.json ga overrides bo'limini qo'shish. Eng yaxshi variant — bog'liqliklarni mos versiyalarga yangilash.
npm audit bog'liqlik daraxtini npm Security Advisory bazasidagi ma'lum zaifliklar uchun skanerlaydi. Buyruq kritiklik darajasi (critical, high, moderate, low) bilan hisobot beradi va zaif paketlarni xavfsiz versiyalarga avtomatik yangilash uchun npm audit fix ni tavsiya qiladi. Muntazam npm audit ishga tushirish — JavaScript loyihalarining asosiy xavfsizlik amaliyotidir.
npm workspaces bir repozitoriyda bir nechta paketlarni boshqarish imkonini beradi. Ildiz package.json ga "workspaces": ["packages/*"] maydonini qo'shing. Afzalliklari: barcha bog'liqliklarning umumiy node_modules ga yagona o'rnatilishi, mahalliy paketlar o'rtasida avtomatik simlinklar, barcha paketlar uchun skriptlarni ildizdan ishga tushirish, versiyalarning takrorlanishini bartaraf etish.
package-lock.json barcha bog'liqliklarning va ularning tranzitiv paketlarining aniq versiyalarini fiksatsiya qiladi. Usiz turli dasturchilar va CI serverlari semantik diapazon doirasida turli xil kutubxona versiyalarini olishlari mumkin, bu esa «mening mashinamda ishlaydi» xatolariga olib keladi. Lock-faylni commit qilish takrorlanadigan qurilishlarni va barcha muhitlarda bir xil harakatni kafolatlaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.