npm (Node Package Manager) — a Node.js platform szabványos csomagkezelője, amely a Node.js telepítőcsomag része. Az npm kezeli a JavaScript és TypeScript projektek függőségeit: könyvtárakat telepít a node_modules mappába, frissíti a csomagverziókat, feloldja a verziókonfliktusokat. package.json — a központi konfigurációs fájl metaadatokkal és függőségi listával. npm Registry — a legnagyobb csomagregisztráció. Bővebben a npm Registry oldalon.
Főbb pontok
npm 2010-ben készült Isaac Schlueter által a Node.js függőségek kezelésének megoldásaként. 2014 óta az npm-et az npm, Inc. vállalat kezeli, amelyet a Microsoft/GitHub vásárolt fel 2020-ban. Az eszköz két részből áll: CLI (parancssor) a csomagok telepítéséhez és kezeléséhez, valamint a Registry — az összes közzétett modul központi tárolója a registry.npmjs.org címen.
npm Registry — a legnagyobb csomagregisztráció: több mint 2 millió csomag és havonta több mint 10 milliárd letöltés. Minden csomag rendelkezik SemVer-verzióval, leírással, függőségekkel, licenccel és szerzőséggel. Saját csomag közzététele az npm publish segítségével történik. Az npm támogatja a szervezetek számára készült scoped csomagokat (@scope/package), privát regisztrációkat és beépített biztonsági auditot.
Node.js 18+ verziója tartalmazza az npm 9+-et javított teljesítménnyel, monorepók számára workspaces-szel és átdolgozott peer dependencies mechanizmussal. Az npm ökoszisztéma magában foglalja a szerveroldali JavaScriptet, a frontendet (React, Vue, Angular), a mobilfejlesztést (React Native), a build eszközöket (Webpack, Vite) és a CLI segédprogramokat. Az npm a JavaScript könyvtárak fő terjesztési csatornája.
npm install — a fő parancs, amely beolvassa a package.json-t és a package-lock.json-t az összes függőség node_modules mappába történő telepítéséhez. Az első futtatáskor az npm kiszámítja a függőségi gráfot, feloldja a verziókonfliktusokat és létrehozza a package-lock.json-t. A npm install <package> parancs egy adott csomagot telepít; a --save-dev zászló a devDependencies-hez, a --global pedig globálisan adja hozzá.
npx — a csomagvégrehajtó, amely az npm 5.2 verziója óta része. Az npx lehetővé teszi CLI segédprogramok futtatását globális telepítés nélkül: npx react-native init vagy npx create-react-app my-app. Az npx letölti a csomagot egy ideiglenes gyorsítótárba, futtatja, majd befejezés után kitakarítja. Az npx hasznos az eszközök adott verzióinak futtatásához is.
npm audit átvizsgálja a függőségi fát ismert sebezhetőségekre az npm adatbázisából. A parancs jelentést jelenít meg kritikussági szintekkel (critical, high, moderate), és javasolja az npm audit fix-et a sérülékeny csomagok automatikus frissítéséhez. npm cache tárolja a letöltött csomagokat lokálisan. Az npm cache clean --force törli a gyorsítótárat telepítési problémák esetén. Az npm outdated megjeleníti az elavult csomagokat.
# Fő npm parancsok
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Futtatás globális telepítés nélkül
$ npx react-native init MyApp
# Biztonsági audit
$ npm audit --fix
package.json — egy JSON-fájl a projekt gyökerében, amely leírja annak metaadatait, függőségeit és konfigurációját. Kötelező mezők: name (a csomag egyedi neve) és version (SemVer-verzió, pl. 1.0.0). A fájl az npm init -y paranccsal hozható létre gyors inicializáláshoz vagy manuálisan.
Semantic Versioning (SemVer) — a MAJOR.MINOR.PATCH verziózási szabvány. A főverzió nem kompatibilis API-változásoknál, a mellékverzió funkcionalitás hozzáadásakor (visszafelé kompatibilis), a javítás hibajavításkor változik. A ^ szimbólum a verzió előtt engedélyezi a mellék- és javításverziók frissítését, a ~ csak a javításverziót.
{
"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"
}
}
| Mező | Cél | Példa érték |
|---|---|---|
| scripts | Futtatási parancsok npm run-hoz | "start": "node index.js" |
| dependencies | Az alkalmazás éles függőségei | "react": "^18.3.0" |
| devDependencies | Fejlesztői és teszteszközök | "jest": "^29.7.0" |
| peerDependencies | Host függőségek könyvtárak számára | "react": ">=17.0.0" |
| engines | Node.js verziókövetelmények | {"node": ">=18.0.0"} |
React Native projektek aktívan használják az npm-et a függőségek kezelésére. A szabványos készlet tartalmazza a react, react-native, navigációs könyvtárakat (React Navigation), HTTP-kéréseket (axios), állapotkezelést (Redux, Zustand) és UI-komponenseket. Az npm lehetővé teszi több ezer kompatibilis csomag telepítését a regisztrációból.
npx pod-install — kötelező parancs natív modulok telepítése után React Native-ben iOS számára. Az npm automatikusan létrehozza a Podfile.lock-ot a package-lock.json alapján. Expo projektekben az expo install használatos az npm install helyett, mert az aktuális Expo SDK verzióval kompatibilis verziókat választ.
Verziókonfliktusok — gyakori probléma a React Native-ben: a react-native-reanimated, react-native-gesture-handler és react-native-safe-area-context összehangolt verziókat igényel. Megoldás — frissíteni az összes csomagot a legújabb kompatibilis verziókra, vagy használni a --legacy-peer-deps-et. A package-lock.json kritikus fontosságú a CocoaPods-on és Gradle-en keresztül fordított natív modulokhoz.
npm — a szabványos csomagkezelő, a Node.js része. Fő alternatívák: yarn (a Facebook által 2016-ban létrehozva) és pnpm (gyors, kemény linkekkel). Az npm 5 óta a sebességbeli és funkcionalitásbeli különbség az npm és a yarn között minimális. Az npm 7+ hozzáadta a workspaces-t, ami versenyképessé teszi monorepók számára.
| Jellemző | npm | yarn | pnpm |
|---|---|---|---|
| Létrehozás éve | 2010 | 2016 | 2017 |
| Lock-fájl | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Telepítés | Szekvenciális (npm 5+) | Párhuzamos | Párhuzamos |
| Lemezterület | Szabványos | Szabványos | Minimális (linkek) |
| Workspaces | Igen (npm 7+) | Igen | Igen |
| Plug'n'Play | Nem | Igen | Nem |
A State of JS 2025 szerint: az npm-et a fejlesztők 62%-a használja, a yarn-t — 35% (főleg régi projektek és PnP-rajongók), a pnpm-et — 3%. React Native projektekhez mindkét eszköz egyenértékű, de az npm gyakrabban fordul elő Expo SDK 50+ projektekben és új React Native inicializálásoknál.
yarn megtartja előnyét rendkívül nagy monorepókban (100+ csomag) a workspaces és Plug'n'Play érettebb implementációja miatt. A pnpm a lemezterület megtakarításában nyer a globális tárolóra mutató kemény linkek révén. A kezelő kiválasztása a csapat preferenciáitól és az infrastruktúrától függ.
Gyakran Ismételt Kérdések
npm install frissíti a package-lock.json-t, és új mellékverziókat telepíthet a szemantikus tartományon belül. npm ci (Clean Install) törli a node_modules-t, és szigorúan a package-lock.json szerint telepíti a csomagokat annak frissítése nélkül. Az npm ci gyorsabb, CI/CD-ben használatos, és azonos környezetet garantál minden gépen. Ha a package-lock.json hiányzik, az npm ci hibát jelez.
Az npm 7-től kezdve a peer dependencies konfliktusok build-hibát okoznak. Megoldások: frissíteni az összes csomagot kompatibilis verziókra npm update segítségével, használni a --legacy-peer-deps zászlót az npm 6 módhoz, vagy hozzáadni egy overrides szakaszt a package.json-hoz egy adott csomag verziójának kényszerített rögzítéséhez. A legjobb megoldás — a függőségek frissítése kompatibilis verziókra.
npm audit átvizsgálja a függőségi fát ismert sebezhetőségekre az npm Security Advisory adatbázisából. A parancs jelentést jelenít meg kritikussági szinttel (critical, high, moderate, low), és javasolja az npm audit fix-et a sérülékeny csomagok automatikus frissítéséhez biztonságos verziókra. Az npm audit rendszeres futtatása — alapvető biztonsági gyakorlat JavaScript projektekben.
npm workspaces lehetővé teszik több csomag kezelését egyetlen tárolóban. Adja hozzá a "workspaces": ["packages/*"] mezőt a gyökér package.json-hoz. Előnyök: az összes függőség egységes telepítése egy megosztott node_modules mappába, automatikus szimbolikus linkek a helyi csomagok között, szkriptek futtatása az összes csomaghoz a gyökérből, verzióduplikáció megszüntetése.
package-lock.json rögzíti az összes függőség és azok tranzitív csomagjainak pontos verzióját. Enélkül a különböző fejlesztők és CI-szerverek eltérő könyvtárverziókat kaphatnak a szemantikus tartományon belül, ami "az én gépemen működik" típusú hibákhoz vezet. A lock-fájl commit-olása reprodukálható build-eket és azonos viselkedést garantál minden környezetben.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is