npm (oprogramowanie) - npm (software)

npm
Npm-logo.svg
Pierwotny autor (autorzy) Isaac Z. Schlueter.
Deweloper(zy) npm, Inc. (spółka zależna GitHub , spółki zależnej Microsoft )
Pierwsze wydanie 12 stycznia 2010 ; 11 lat temu ( 2010-01-12 )
Wersja stabilna
7.24.2  Edytuj to na Wikidanych / 4 października 2021 ; 12 dni temu ( 4 października 2021 )
Magazyn
Napisane w JavaScript
Platforma Wieloplatformowy
Rodzaj Menedżer pakietów
Licencja Licencja artystyczna 2.0
Strona internetowa www .npmjs .com

npm to menedżer pakietów dla języka programowania JavaScript obsługiwany przez npm, Inc .

npm jest domyślnym menedżerem pakietów dla środowiska uruchomieniowego JavaScript Node.js . Składa się z klienta wiersza poleceń, zwanego również npm, oraz internetowej bazy danych publicznych i płatnych pakietów prywatnych, zwanej rejestrem npm. Dostęp do rejestru uzyskuje się za pośrednictwem klienta, a dostępne pakiety można przeglądać i przeszukiwać za pośrednictwem strony npm. Menedżerem pakietów i rejestrem zarządza npm, Inc.

Akronim

Wbrew powszechnemu przekonaniu npmnie jest to w rzeczywistości akronim od „Node Package Manager”. Prekursorem npmbyło właściwie narzędzie basha o nazwie "pm", które było skróconą nazwą "pkgmakeinst" - funkcji basha, która instalowała różne rzeczy na różnych platformach. Gdyby npmkiedykolwiek był uważany za akronim, byłby to „węzeł pm” lub potencjalnie „nowy pm”.

Historia

npm jest napisany w całości w JavaScript i został opracowany przez Isaaca Z. Schluetera w wyniku "widzenia, że ​​pakowanie modułów zostało strasznie wykonane" i inspiracji innymi podobnymi projektami, takimi jak PEAR ( PHP ) i CPAN ( Perl ).

Znaczące złamania

  • W marcu 2016 r. npm przyciągnął uwagę prasy po tym, jak pakiet o nazwie left-pad, na którym opierało się wiele popularnych pakietów JavaScript, został wycofany z publikacji w wyniku sporu nazewniczego między Azerem Koculu, samoukiem inżynierem oprogramowania, a Kik . Chociaż pakiet został ponownie opublikowany trzy godziny później, spowodował szerokie zakłócenia, co doprowadziło npm do zmiany zasad dotyczących cofania publikacji, aby zapobiec podobnym zdarzeniom w przyszłości.
  • W lutym 2018 wykryto problem w wersji 5.7.0, w którym działanie sudo npmw systemach Linux zmieniało właściciela plików systemowych, trwale łamiąc system operacyjny.
  • W lipcu 2018 roku poświadczenia npm opiekuna popularnego eslint-scopepakietu zostały naruszone, co spowodowało złośliwe wydanie eslint-scopewersji 3.7.2. Złośliwy kod skopiował dane uwierzytelniające npm działającej maszyny eslint-scopei przesłał je osobie atakującej.
  • W listopadzie 2018 r. odkryto, że złośliwy pakiet został dodany jako zależność od wersji 3.3.6 popularnego pakietu event-stream. Złośliwy pakiet o nazwie flatmap-stream, zawierał zaszyfrowany ładunek, który kradł bitcoiny z niektórych aplikacji. Administratorzy npm usunęli obraźliwy pakiet.
  • W kwietniu 2020 r. mały pakiet o nazwie is-promisespowodował awarię w aplikacjach bezserwerowych i wdrożeniach na całym świecie, ponieważ był uzależniony od wielu dużych i ważnych aplikacji.

Opis

npm jest dołączony jako zalecana funkcja w instalatorze Node.js. npm składa się z klienta wiersza polecenia, który współdziała z rejestrem zdalnym. Umożliwia użytkownikom korzystanie i dystrybucję modułów JavaScript dostępnych w rejestrze. Pakiety w rejestrze są w formacie CommonJS i zawierają plik metadanych w formacie JSON . W głównym rejestrze npm dostępnych jest ponad 1,3 miliona pakietów. Rejestr nie ma żadnego procesu weryfikacji przed przesłaniem, co oznacza, że ​​znalezione w nim pakiety mogą być potencjalnie niskiej jakości, niebezpieczne lub złośliwe. Zamiast tego npm polega na raportach użytkowników, aby usunąć pakiety, jeśli naruszają zasady, ponieważ są niskiej jakości, niezabezpieczone lub złośliwe. npm udostępnia statystyki, w tym liczbę pobrań i liczbę zależnych pakietów, aby pomóc deweloperom w ocenie jakości pakietów.

W npm w wersji 6 wprowadzono funkcję audytu, aby pomóc programistom zidentyfikować i naprawić luki w zabezpieczeniach w zainstalowanych pakietach. Źródło luk w zabezpieczeniach zostało zaczerpnięte z raportów znalezionych na platformie Node Security Platform (NSP) i zostało zintegrowane z npm od momentu przejęcia NSP przez npm.

Stosowanie

npm może zarządzać pakietami, które są lokalnymi zależnościami konkretnego projektu, a także globalnie zainstalowanymi narzędziami JavaScript. Gdy jest używany jako menedżer zależności dla projektu lokalnego, npm może zainstalować za pomocą jednego polecenia wszystkie zależności projektu za pośrednictwem package.jsonpliku. W package.jsonpliku każda zależność może określić zakres poprawnych wersji przy użyciu schematu wersjonowania semantycznego, co pozwala programistom na automatyczną aktualizację swoich pakietów, jednocześnie unikając niepożądanych zmian. npm zapewnia również narzędzia do zmiany wersji dla deweloperów, aby oznaczyć swoje pakiety określoną wersją. npm udostępnia również package-lock.jsonplik, który zawiera dokładną wersję używaną przez projekt po ocenie wersji semantycznej w programie package.json.

Alternatywy

Istnieje wiele alternatyw typu open source dla npm do instalowania modułowego JavaScript, w tym ied, pnpm, npmdi Yarn, z których ostatnia została wydana przez Facebook w październiku 2016 r. Wszystkie są kompatybilne z publicznym rejestrem npm i domyślnie go używają, ale zapewniaj inne doświadczenia po stronie klienta, zwykle skoncentrowane na poprawie wydajności i determinizmu w porównaniu z klientem npm.

Na JSConf 2019 były dyrektor ds. technologii npm ogłosił nowy sfederowany rejestr pakietów, Entropic, którego celem jest decentralizacja wspólnych zasobów JavaScript.

Rejestr

Wewnętrznie npm opiera się na NoSQL Couch DB do zarządzania publicznie dostępnymi danymi.

Zobacz też

Bibliografia

Zewnętrzne linki