**npm** (**Node Package Manager**) on JavaScripti programmeerimiskeele jaoks loodud paketihaldur. See on JavaScripti käituskeskkonna Node.js standardne paketihaldur. 

See koosneb kolmest eraldi komponendist: veebileht, käsurida ehk tekstiline kasutajaliides ning võrgus olev register (npm registry), mida kasutatakse avalike ja privaatsete pakkide hoiustamiseks. Register on sisuliselt avalik JavaScripti tarkvara andmebaas. Tegemist on maailma suurima tarkvararegistriga. Registris kättesaadavaid pakette on võimalik näha ja otsida npm veebilehel.

Ajalugu
-------

npm on kirjutatud täielikult JavaScripti keele baasil. Selle töötas välja Isaac Z. Schlueter. 

Enne npmi loomist töötas Schlueter Yahoos, kus oli tal harjumuseks saanud oma töös paketihalduri kasutamine. 2009. aastal, pärast Node.js'i tulekut hakkas ta npmi kallal töötama, sest kuigi Node.js'i arendus liikus tema arvates õiges suunas, tundis ta siiski puudust korralikust paketihaldurist. Kuna ta oli kokku puutunud mitmesuguste paketihalduritega, millest ükski polnud veatu ning mõni oli lausa kohutav, oli tema jaoks oluline, et Node'i pakettide ja moodulite haldamine toimuks valutult.

Kirjeldus
---------

npm on märgitud Node.jsi installimisel soovitatavaks funktsiooniks. npm koosneb käsurea kasutajaliidesest, mis suhtleb võrgus oleva registriga. See võimaldab kasutajatel lihtsasti alla laadida ja kasutada teiste kirjutatud koodi ning ka enda loodud mooduleid vaevata levitada. Registris olevad paketid on CommonJS-i vormingus ja sisaldavad metaandmete faili JSON-i vormingus. Npmi registris on praeguseks saadaval üle miljoni paketi. Kuna registrisse lisatavate pakettide päritolu ei kontrollita, võib seal esineda halva kvaliteediga ja isegi pahatahtlikke mooduleid. Eraldi pakettide päritolu kontrollimise asemel loodab npm kasutajatele, et need vajadusel annaksid teada süsteemi sattunud pakettidest, mis rikuvad npmi sätestatud reegleid. Lisaks sellele on võimalik kasutajatel pakettide usaldusväärsust hinnata veebilehel kuvatud statistika (allalaadimiste arv, sõltuvate pakettide arv jne) põhjal.

Kasutus
-------

npm saab hallata nii konkreetse projekti lokaalseid sõltuvusi kui ka globaalselt installitud JavaScripti tööriistu. Kasutades npmi lokaalse projekti pakettide haldamiseks, on `package.json` faili abil ühe käsuga võimalik installida kõik projekti sõltuvused. Failis `package.json` saab igale sõltuvusele määrata kehtivate versioonide vahemiku, mis võimaldab arendajatel sõltuvusi automaatselt värskendada, vältides samal ajal soovimatuid muudatusi, mis võivad rakenduse katki teha.

Alternatiivid
-------------

Kuigi npmi kasutatakse JavaScripti paketihaldurite seast kõige rohkem, leidub sellele ka avatud lähtekoodiga alternatiive. Nendest kõige populaarsemad on `ied`, `pnpm`, `npmd` ja `yarn`, millest viimase lõi 2016. aasta oktoobris Facebook. Kõik mainitud haldurid kasutavad vaikimisi ka avalikku npm-registrit, kuid pakuvad kasutajale ka muid variante, et kasutaja saaks valida selle, millega arvab saavutavat enda jaoks olulistes aspektides parema jõudluse.

Viited
------

1. ↑  "About npm". *docs.npmjs*. Npm. Vaadatud 12. detsember 2019.
2. ↑  Fleishman, Glenn (oktoober 2017). "Interview with Isaac Z. Schlueter, CEO of npm". *Increment*. Vaadatud 12. detsember 2019.
3. ↑  Schlueter, Isaac Z (26. märts 2013). "Github comment". *Github*. Vaadatud 12. detsember 2019.
4. ↑  Dierx, Peter (30. märts 2016). "A Beginner's Guide to npm — the Node Package Manager". *sitepoint*. Vaadatud 12. detsember 2019.
5. ↑  Ampersand.js. "Ampersand.js - Learn". *ampersandjs.com*. Vaadatud 12. detsember 2019.
6. ↑  Ojamaa, Andres; Duuna, Karl (2012). "Assessing the Security of Node.js Platform". *2012 International Conference for Internet Technology and Secured Transactions*. IEEE. ISBN 978-1-4673-5325-0. Vaadatud 12. detsember 2019.
7. ↑  Tal, Liran; Maple, Simon (4. juuni 2019). "npm passes the 1 millionth package milestone! What can we learn?". *Snyk*. Vaadatud 12. detsember 2019.
8. ↑  "npm Code of Conduct: acceptable package content". Vaadatud 12. detsember 2019.
9. ↑  Vorbach, Paul. "npm-stat: download statistics for NPM packages". *npm-stat.com*. Vaadatud 12. detsember 2019.
10. ↑  Ellingwood, Justin. "How To Use npm to Manage Node.js Packages on a Linux Server". *DigitalOcean*. Vaadatud 12. detsember 2019.
11. ↑  "npm-install". *docs.npmjs*. Vaadatud 12. detsember 2019.
12. ↑  "semver". *docs.npmjs*. Originaali arhiivikoopia seisuga 3. detsember 2016. Vaadatud 12. detsember 2019.
13. ↑  Pronschinske, Mitch. "The most popular JavaScript front-end tools". *TechBeacon*. Vaadatud 12. detsember 2019.
14. ↑  "Hello, Yarn!". *The npm Blog*. 11. oktoober 2016. Vaadatud 12. detsember 2019.
15. ↑  Katz, Yehuda (11. oktoober 2016). "Why I'm working on Yarn". Vaadatud 12. detsember 2019.