NPM (Software)

NPM
Npm-logo.svg
Originalautor (en) Isaac Z. Schlueter
Entwickler (en) NPM, Inc. (eine Tochtergesellschaft von GitHub,[1] eine Tochtergesellschaft von Microsoft)
Erstveröffentlichung 12. Januar 2010; vor 12 Jahren[2]
Stabile Version
8.12.1[3] Edit this on Wikidata / 2. Juni 2022; Vor 2 Monaten
Repository
Geschrieben in JavaScript
Plattform Plattformübergreifend
Typ Paket-Manager
Lizenz Künstlerische Lizenz 2.0
Webseite www.npmjs.com

NPM (ursprünglich kurz zum Knotenpaketmanager)[4] ist ein Paket-Manager für die JavaScript Programmiersprache beibehalten durch NPM, Inc. NPM ist der Standardpaket -Manager für die JavaScript -Laufzeitumgebung Node.js. Es besteht aus einem Befehlszeilen -Client, auch NPM genannt, und einer Online -Datenbank von öffentlichen und bezahlten privaten Paketen, genannt NPM Registry. Die Registrierung wird über den Client zugegriffen, und die verfügbaren Pakete können über die NPM -Website durchsucht und gesucht werden. Der Paketmanager und die Registrierung werden von NPM, Inc. verwaltet.

Akronym

NPM ist offiziell ein "rekursiv Bacronymisch Die Abkürzung für 'NPM ist kein Paketmanager'".[5] Der anfängliche Commit von jedoch NPM bezeichnet es als "Knotenpaketmanager".[6] Die Erweiterung des Namens wurde 2014 geändert.[7]

Geschichte

NPM ist vollständig in JavaScript geschrieben und wurde von Isaac Z. Schlueter entwickelt, weil "Modulverpackungen furchtbar gemacht" und mit Inspiration von anderen ähnlichen Projekten wie z. BIRNE (Php) und CPAN (Perl).[8]

Bemerkenswerte Bruch

  • Im März 2016 erregte NPM die Aufmerksamkeit der Presse auf sich[9] Nach einem Paket namens links, auf die viele beliebte JavaScript-Pakete abhängig waren, war infolge eines Namensstreits zwischen Azer Koçulu, einem autodidaktischen Software-Ingenieur und einem Namensstreit und nicht veröffentlicht. Kik.[10][11] Obwohl das Paket drei Stunden später erneut veröffentlicht wurde, wurde[12] Es führte zu einer weit verbreiteten Störung und führte dazu, dass NPM seine Richtlinien in Bezug auf unveröffentlichte Veröffentlichungen verändert hat, um ein ähnliches Ereignis in Zukunft zu verhindern.[13]
  • Im Februar 2018 wurde in Version 5.7.0 ein Problem entdeckt, in dem Laufen sudo npm Unter Linux -Systemen würde das Eigentum an Systemdateien ändern und das Betriebssystem dauerhaft durcheinander bringen.[14]
  • Im Juli 2018 haben die NPM -Anmeldeinformationen eines Betreuers des Volks Eslint-Scope Das Paket wurde kompromittiert, was zu einer böswilligen Veröffentlichung von führte Eslint-Scope, Version 3.7.2. Der böswillige Code kopierte die NPM -Anmeldeinformationen des laufenden Maschine Eslint-Scope und lud sie auf den Angreifer hoch.[15]
  • Im November 2018 wurde festgestellt, dass ein böswilliges Paket als Abhängigkeit von Version 3.3.6 des beliebten Pakets hinzugefügt wurde Ereignisstrom. Das bösartige Paket, genannt Flatmap-Streamenthielt eine verschlüsselte Nutzlast, die gestohlen wurde Bitcoins aus bestimmten Anwendungen. NPM -Administratoren haben das beleidigende Paket entfernt.[16][17]
  • Im April 2020 ein kleines Paket namens namens IS-Verständnis führte zu einem Ausfall in serverlosen Anwendungen und Bereitstellungen weltweit, da viele große und wichtige Anwendungen abhängig sind.[18]
  • Im Januar 2022 der Betreuer des beliebten Pakets Farben Pushed Änderungen Druckmülltext in einer unendlichen Schleife. Der Betreuer löste auch das Repository eines anderen beliebten Pakets. Schwindlerund sein Paket auf NPM und ersetzte es durch ein Readme mit der Aufschrift: "Was wirklich passiert ist Aaron Swartz? "[19]
  • Im März 2022, Entwickler, Brandon Nozaki Miller veröffentlichte eine Version des Pakets Knoten-IPC Mit bösartigem Code enthält, der Dateien von Benutzern mit belarussischen und russischen IP -Adressen löscht, aus Protest gegen die Russische Invasion der Ukraine. Vue.js, was verwendet Knoten-IPC Als Abhängigkeit wurde ihre Abhängigkeiten nicht an eine sichere Version festgehalten, was bedeutet, dass einige Benutzer von Vue.js vom böswilligen Paket betroffen wurden, wenn die Abhängigkeit als neuestes Paket abgerufen wurde.[20][21] Die betroffene Abhängigkeit war auch kurz in Version 3.1 von vorhanden Unity Hub; Am selben Tag wurde jedoch ein Hotfix veröffentlicht, um das Problem zu entfernen.[22]

Beschreibung

NPM ist als empfohlene Funktion in der enthalten Node.js Installateur.[23] NPM besteht aus a Befehlszeile Kunde, der mit einer Remote -Registrierung interagiert. Es ermöglicht Benutzern, JavaScript -Module zu konsumieren und zu verteilen, die in der Registrierung verfügbar sind.[24] Pakete in der Registrierung sind in CommonJS Formatieren und eine Metadatendatei in einfügen in JSON Format.[25] Über 1,3 Millionen Pakete sind im Hauptregister der NPM erhältlich.[26] Die Registrierung hat keinen Überprüfungsprozess für die Einreichung, was bedeutet, dass Pakete möglicherweise von geringer Qualität, unsicher oder böswillig vorhanden sind.[25] Stattdessen verlässt sich NPM auf Benutzerberichte, um Pakete abzubauen, wenn sie gegen Richtlinien verstoßen, indem sie von geringer Qualität, unsicher oder böswillig sind.[27] NPM enthält Statistiken, einschließlich der Anzahl der Downloads und der Anzahl der abhängigen Pakete, um Entwicklern bei der Beurteilung der Qualität der Pakete zu unterstützen.[28]

In NPM Version 6 wurde die Prüfungsfunktion eingeführt, um Entwicklern die Identifizierung und Behebung von Sicherheitslücken in installierten Paketen zu ermöglichen.[29] Die Quelle für Sicherheitslücken stammt aus Berichten auf der Node Security Platform (NSP) und wurde seit dem Erwerb von NSP durch NPM in NPM integriert.[30]

Verwendungszweck

NPM kann vor Ort Pakete verwalten Abhängigkeiten eines bestimmten Projekts sowie global installierte JavaScript-Tools.[31] Wenn NPM als Abhängigkeitsmanager für ein lokales Projekt verwendet wird, kann er in einem Befehl alle Abhängigkeiten eines Projekts durch die installieren package.json Datei.[32] In dem package.json Datei kann jede Abhängigkeit einen Bereich von Gültig angeben Versionen Verwenden des semantischen Versionsschemas, sodass Entwickler ihre Pakete automatisch aufbauen und gleichzeitig unerwünschte Bruchänderungen vermeiden können.[33] NPM bietet Entwicklern auch Versions-Bumping-Tools, um ihre Pakete mit einer bestimmten Version zu markieren.[34] NPM liefert auch die package-lock.json[35] Datei, die den Eintrag der genauen Version enthält, die vom Projekt nach der Bewertung der semantischen Versioning in verwendet wird package.json.

Alternativen

Es gibt eine Reihe von Open-Source-Alternativen zu NPM zur Installation modularer JavaScript, einschließlich ied, pnpm, NPMD, und Garn, der letzte davon wurde von veröffentlicht von Facebook im Oktober 2016.[36] Sie sind alle mit der öffentlichen NPM-Registrierung kompatibel und verwenden sie standardmäßig, bieten jedoch unterschiedliche kundenseitige Erfahrungen, die sich normalerweise auf die Verbesserung der Leistung und auf die Leistung konzentrieren und Determinismus Im Vergleich zum NPM -Client.[37]

Registrierung

Internes NPM stützt sich auf das NoSQL Couch db öffentlich verfügbare Daten verwalten.[38]

Siehe auch

Verweise

  1. ^ "Microsoft-Besitz von GitHub zum Erwerb von JavaScript-Paketmanager NPM". Geekwire. 17. März 2020.
  2. ^ "Früheste Veröffentlichungen von NPM". GitHub. Abgerufen 5. Januar 2019.
  3. ^ https://github.com/npm/cli/releases/tag/v8.12.1; Veröffentlichungsdatum: 2. Juni 2022; Abgerufen: 9. Juni 2022.
  4. ^ "Erstes Tropfen. Hässlich, skizzenhaft und noch nicht einmal" Arbeit in Programm ... · NPM/CLI@4626DFA ".. GitHub.
  5. ^ Clarke, Darcy (12. Februar 2021). "NPM - Ein JavaScript -Paket -Manager". GitHub. NPM. Abgerufen 5. Oktober 2021.
  6. ^ "NPM - Ein JavaScript -Paket -Manager". GitHub. 12. Februar 2022.
  7. ^ "NPM ist ein netter JavaScript -Paket -Manager · NPM/CLI@CBB890E". GitHub.
  8. ^ Schlueter, Isaac Z. (25. März 2013). "Vergiss Commonjs. Es ist tot. ** Wir sind Server -Seite JavaScript. **". GitHub.
  9. ^ Yegulalp, Serdar (23. März 2016). "Wie ein JavaScript -Paket verwüstet hat". InfoWorld. Abgerufen 22. Juli 2016.
  10. ^ Williams, Chris. "Wie ein Entwickler gerade Knoten, Babel und Tausende von Projekten in 11 Zeilen JavaScript gebrochen hat". Das Register. Abgerufen 17. April 2016.
  11. ^ Collins, Keith. "Wie ein Programmierer das Internet gebrochen hat, indem er ein kleines Stück Code löschte". Quarz. Abgerufen 23. Dezember 2020.
  12. ^ "Kik, links und NPM". Abgerufen 9. Mai 2017.
  13. ^ "Änderungen an der unveröffentlichten Politik". NPM -Blog (Archiv). Abgerufen 23. Januar 2022.
  14. ^ "Kritische Linux -Dateisystemberechtigungen werden durch die neueste Version geändert". GitHub. Abgerufen 25. Februar 2018.
  15. ^ "Virus in Eslint-scope? · Ausgabe #39 · Eslint/Eslint-scope". GitHub.
  16. ^ "Details zum Ereignisstream-Vorfall". Der NPM -Blog. Abgerufen 28. November 2018.
  17. ^ "Backdoored Abhängigkeit? Flatmap-Stream-0.1.1 und Flatmap-Stream-0.1.2". Github. Abgerufen 28. November 2018.
  18. ^ "Err_invalid_package_target". Github. Abgerufen 22. August 2020.
  19. ^ "Dev korrumpiert npm libs 'farben' und 'faker', die Tausende von Apps brechen". Piepiercomputer. Abgerufen 9. Januar 2022.
  20. ^ "Big Sabotage: Das berühmte NPM -Paket löscht Akten, um den Ukrainekrieg zu protestieren". Piepiercomputer. Abgerufen 17. März 2022.
  21. ^ Juha Saarinen (17. März 2022). "'Protestware' NPM-Paketabhängigkeit mit der Bezeichnung "Supply-Chain-Angriff" bezeichnet ". Es hat Nachrichten. NextMedia.
  22. ^ Provenen, Liam (18. März 2022). "JavaScript -Bibliothek wird aktualisiert, um Dateien von russischen Computern zu löschen". Das Register. Situation Publishing. Archiviert Aus dem Original am 18. März 2022. Abgerufen 18. März 2022.
  23. ^ Dierx, Peter (30. März 2016). "Ein Anfängerleitfaden für NPM - The Node Paket Manager". sitepoint. Abgerufen 22. Juli 2016.
  24. ^ Ampersand.js. "Ampersand.js - lernen". Ampersandjs.com. Abgerufen 22. Juli 2016.
  25. ^ a b Ojamaa, Andres; Duuna, Karl (2012). "Bewertung der Sicherheit der Node.js -Plattform". 2012 Internationale Konferenz für Internet -Technologie und gesicherte Transaktionen. IEEE. ISBN 978-1-4673-5325-0. Abgerufen 22. Juli 2016.
  26. ^ Nassri, Ahmad (14. April 2020). "So lange und danke für alle Pakete!". Der NPM -Blog. Abgerufen 6. Januar 2021.{{}}: CS1 Wartung: URL-Status (Link)
  27. ^ "NPM -Verhaltenskodex: Akzeptable Paketinhalt". Abgerufen 9. Mai 2017.
  28. ^ Vorbach, Paul. "NPM-STAT: Download Statistiken für NPM-Pakete". npm-stat.com.
  29. ^ NPM. ""NPM Audit": Identifizieren und beheben Sie unsichere Abhängigkeiten ". Der NPM -Blog. Abgerufen 14. August 2018.
  30. ^ NPM. "Der Dienst der Knoten -Sicherheitsplattform wird für 9/30 geschlossen". Der NPM -Blog. Abgerufen 14. August 2018.
  31. ^ Ellingwood, Justin. "So verwenden Sie NPM zum Verwalten von Node.js -Paketen auf einem Linux -Server". Digitalocean. Abgerufen 22. Oktober 2016.
  32. ^ "NPM-Installation". docs.npmjs. Abgerufen 22. Oktober 2016.
  33. ^ "Semver". docs.npmjs. Abgerufen 22. Oktober 2016.
  34. ^ "NPM-Version". docs.npm. Abgerufen 29. Oktober 2016.
  35. ^ Koirala, Shivprasad (21. August 2017). "Was braucht Package-Lock.json im Knoten?". CodeProject.
  36. ^ "Hallo Garn!". Der NPM -Blog. 11. Oktober 2016. Abgerufen 17. Dezember 2016.
  37. ^ Katz, Yehuda (11. Oktober 2016). "Warum ich an Garn arbeite". Abgerufen 17. Dezember 2016.
  38. ^ "Registrierung | npm docs". docs.npmjs.com. Abgerufen 10. Mai 2021.

Externe Links