npm (Node Package Manager) — de standaard pakketbeheerder voor het Node.js-platform, meegeleverd met de Node.js-installatie. npm beheert afhankelijkheden van JavaScript en TypeScript projecten: installeert bibliotheken in node_modules, werkt pakketversies bij, lost versieconflicten op. package.json — het centrale configuratiebestand met metadata en een lijst van afhankelijkheden. npm Registry — de grootste pakketregister. Meer op npm Registry.
Belangrijkste punten
npm werd in 2010 gecreëerd door Isaac Schlueter als een oplossing voor het beheren van Node.js-afhankelijkheden. Sinds 2014 wordt npm beheerd door npm, Inc., overgenomen door Microsoft/GitHub in 2020. Het gereedschap bestaat uit twee delen: CLI (commandoregel) voor het installeren en beheren van pakketten, en Registry — de centrale repository van alle gepubliceerde modules op registry.npmjs.org.
npm Registry — de grootste pakketregister: meer dan 2 miljoen pakketten en meer dan 10 miljard downloads per maand. Elk pakket heeft een SemVer-versie, beschrijving, afhankelijkheden, licentie en auteurschap. Het publiceren van een eigen pakket gebeurt via npm publish. npm ondersteunt gescoopte pakketten voor organisaties (@scope/package), privéregisters en ingebouwde beveiligingsaudit.
Node.js versie 18+ bevat npm 9+ met verbeterde prestaties, workspaces voor monorepo's en een herziene peer dependencies-mechanisme. Het npm-ecosysteem omvat server-side JavaScript, frontend (React, Vue, Angular), mobiele ontwikkeling (React Native), buildtools (Webpack, Vite) en CLI-hulpprogramma's. npm is het belangrijkste distributiekanaal voor JavaScript-bibliotheken.
npm install — het hoofdcommando dat package.json en package-lock.json leest om alle afhankelijkheden in node_modules te installeren. Bij de eerste uitvoering berekent npm de afhankelijkheidsgraaf, lost versieconflicten op en genereert package-lock.json. Het commando npm install <package> installeert een specifiek pakket; de vlag --save-dev voegt toe aan devDependencies, --global — globaal.
npx — de pakketuitvoerder, meegeleverd met npm sinds versie 5.2. npx maakt het mogelijk CLI-hulpprogramma's uit te voeren zonder globale installatie: npx react-native init of npx create-react-app my-app. npx downloadt het pakket naar een tijdelijke cache, voert het uit en ruimt het na afloop op. npx is ook handig voor het uitvoeren van specifieke versies van tools.
npm audit scant de afhankelijkheidsboom op bekende kwetsbaarheden uit de npm-database. Het commando toont een rapport met ernstniveaus (critical, high, moderate) en beveelt npm audit fix aan voor automatische updates van kwetsbare pakketten. npm cache slaat gedownloade pakketten lokaal op. npm cache clean --force wist de cache bij installatieproblemen. npm outdated toont verouderde pakketten.
# Belangrijkste npm-commando's
$ npm install
$ npm install react-native-webview --save
$ npm install typescript --save-dev
# Uitvoeren zonder globale installatie
$ npx react-native init MyApp
# Beveiligingsaudit
$ npm audit --fix
package.json — is een JSON-bestand in de projectroot dat de metadata, afhankelijkheden en configuratie beschrijft. Verplichte velden: name (unieke pakketnaam) en version (SemVer-versie, bijvoorbeeld 1.0.0). Het bestand wordt aangemaakt met het commando npm init -y voor snelle initialisatie of handmatig.
Semantic Versioning (SemVer) — de versienorm MAJOR.MINOR.PATCH. De hoofdversie verandert bij incompatibele API-wijzigingen, de kleine versie bij toevoeging van functionaliteit (achterwaarts compatibel), en de patch bij het oplossen van bugs. Het symbool ^ voor de versie staat updates van de kleine versie en patch toe, ~ alleen de patch.
{
"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"
}
}
| Veld | Doel | Voorbeeldwaarde |
|---|---|---|
| scripts | Startcommando's voor npm run | "start": "node index.js" |
| dependencies | Productieafhankelijkheden van de applicatie | "react": "^18.3.0" |
| devDependencies | Ontwikkel- en testtools | "jest": "^29.7.0" |
| peerDependencies | Hostafhankelijkheden voor bibliotheken | "react": ">=17.0.0" |
| engines | Node.js-versievereisten | {"node": ">=18.0.0"} |
React Native projecten maken actief gebruik van npm voor afhankelijkheidsbeheer. De standaardset omvat react, react-native, navigatiebibliotheken (React Navigation), HTTP-verzoeken (axios), toestandsbeheer (Redux, Zustand) en UI-componenten. npm maakt het mogelijk duizenden compatibele pakketten uit het register te installeren.
npx pod-install — een verplicht commando na installatie van native modules in React Native voor iOS. npm genereert automatisch Podfile.lock op basis van package-lock.json. In Expo-projecten wordt expo install gebruikt in plaats van npm install, omdat het versies kiest die compatibel zijn met de huidige Expo SDK-versie.
Versieconflicten — een veelvoorkomend probleem in React Native: react-native-reanimated, react-native-gesture-handler en react-native-safe-area-context vereisen compatibele versies. Oplossing — alle pakketten bijwerken naar de nieuwste compatibele versies of --legacy-peer-deps gebruiken. package-lock.json is cruciaal voor native modules die via CocoaPods en Gradle worden gecompileerd.
npm — de standaard pakketbeheerder, meegeleverd met Node.js. De belangrijkste alternatieven: yarn (gemaakt door Facebook in 2016) en pnpm (snel, met harde links). Sinds npm 5 is het verschil in snelheid en functionaliteit tussen npm en yarn minimaal. npm 7+ voegde workspaces toe, wat het concurrerend maakt voor monorepo's.
| Kenmerk | npm | yarn | pnpm |
|---|---|---|---|
| Jaar van oprichting | 2010 | 2016 | 2017 |
| Lock-bestand | package-lock.json | yarn.lock | pnpm-lock.yaml |
| Installatie | Sequentiëel (npm 5+) | Parallel | Parallel |
| Schijfruimte | Standaard | Standaard | Minimaal (links) |
| Workspaces | Ja (npm 7+) | Ja | Ja |
| Plug'n'Play | Nee | Ja | Nee |
Volgens State of JS 2025: npm wordt gebruikt door 62% van de ontwikkelaars, yarn — 35% (voornamelijk oude projecten en PnP-fans), pnpm — 3%. Voor React Native projecten zijn beide tools gelijkwaardig, maar npm komt vaker voor in projecten op Expo SDK 50+ en nieuwe React Native-initialisaties.
yarn behoudt zijn voordeel in extreem grote monorepo's (100+ pakketten) dankzij een volwassener implementatie van workspaces en Plug'n'Play. pnpm wint op het gebied van schijfruimtebesparing door harde links naar een globale opslag. De keuze van de beheerder hangt af van teamvoorkeuren en infrastructuur.
Veelgestelde vragen
npm install werkt package-lock.json bij en kan nieuwe kleine versies binnen het semantische bereik installeren. npm ci (Clean Install) verwijdert node_modules en installeert pakketten strikt volgens package-lock.json zonder het bij te werken. npm ci is sneller, wordt gebruikt in CI/CD en garandeert een identieke omgeving op alle machines. Als package-lock.json ontbreekt, geeft npm ci een foutmelding.
Sinds npm 7 veroorzaken peer dependencies-conflicten een buildfout. Oplossingen: alle pakketten bijwerken naar compatibele versies via npm update, de vlag --legacy-peer-deps gebruiken voor npm 6-modus, of een overrides-sectie toevoegen in package.json om de versie van een specifiek pakket geforceerd vast te leggen. De beste optie — afhankelijkheden bijwerken naar compatibele versies.
npm audit scant de afhankelijkheidsboom op bekende kwetsbaarheden uit de npm Security Advisory-database. Het commando toont een rapport met ernstniveaus (critical, high, moderate, low) en beveelt npm audit fix aan voor automatische updates van kwetsbare pakketten naar veilige versies. Regelmatig npm audit uitvoeren — een basisbeveiligingspraktijk in JavaScript-projecten.
npm workspaces maken het mogelijk meerdere pakketten in één repository te beheren. Voeg het veld "workspaces": ["packages/*"] toe in de root package.json. Voordelen: uniforme installatie van alle afhankelijkheden in een gedeelde node_modules, automatische symlinks tussen lokale pakketten, uitvoeren van scripts voor alle pakketten vanuit de root, eliminatie van versieduplicatie.
package-lock.json legt de exacte versies vast van alle afhankelijkheden en hun transitieve pakketten. Zonder dit kunnen verschillende ontwikkelaars en CI-servers verschillende bibliotheekversies binnen het semantische bereik krijgen, wat leidt tot fouten van het type "het werkt op mijn machine". Het committen van het lock-bestand garandeert reproduceerbare builds en identiek gedrag in alle omgevingen.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook