stringtranslate.com

нпм

npm — это менеджер пакетов для языка программирования JavaScript , поддерживаемый npm, Inc., дочерней компанией GitHub . npm — это менеджер пакетов по умолчанию для среды выполнения JavaScript Node.js , который включен в качестве рекомендуемой функции в установщик Node.js. [4]

Он состоит из клиента командной строки, также называемого npm, и онлайн-базы данных публичных и платных частных пакетов, называемой реестром npm. Доступ к реестру осуществляется через клиент, а доступные пакеты можно просматривать и искать через веб-сайт npm. Менеджер пакетов и реестр управляются npm, Inc.

Хотя «npm» обычно понимают как аббревиатуру от «Node Package Manager», официально это рекурсивный бэкроним для «npm не является аббревиатурой». [5]

История

npm был разработан Айзеком З. Шлютером в результате того, что он «увидел, как ужасно сделана упаковка модулей», а также вдохновлен другими похожими проектами, такими как PEAR ( PHP ) и CPAN ( Perl ). [6] npm — это замена pm, скрипта оболочки , на JavaScript . [7]

Компания npm, Inc. была основана в 2014 году в Окленде, Калифорния , США, соучредителем которой является Лори Восс. Брайан Богенсбергер присоединился к компании в качестве генерального директора в июле 2018 года и ушел в отставку в сентябре 2019 года. [8] До отставки Богенсбергера в июле 2019 года в отставку ушла Лори Восс. [9]

В марте 2020 года npm был приобретен GitHub , дочерней компанией Microsoft .

Использование

npm может управлять пакетами, которые являются локальными зависимостями определенного проекта, а также глобально установленными инструментами JavaScript. [10] При использовании в качестве менеджера зависимостей для локального проекта npm может установить все зависимости проекта через файл одной командой package.json. [11] В package.jsonфайле каждая зависимость может указывать диапазон допустимых версий с использованием схемы семантического версионирования, что позволяет разработчикам автоматически обновлять свои пакеты, избегая при этом нежелательных критических изменений. [12] npm также предоставляет инструменты повышения версии для разработчиков, чтобы пометить свои пакеты определенной версией. [13] npm также предоставляет файл package-lock.json[14] , который содержит запись точной версии, используемой проектом после оценки семантического версионирования в package.json.

Клиент

Клиент интерфейса командной строки npm позволяет пользователям использовать и распространять модули JavaScript, доступные в реестре. [15]

В феврале 2018 года в версии 5.7.0 была обнаружена проблема, из-за которой запуск sudo npmв системах Linux приводил к изменению владельца системных файлов, что приводило к необратимому выходу операционной системы из строя. [16]

В версии npm 6 функция аудита была введена, чтобы помочь разработчикам выявлять и устранять уязвимости безопасности в установленных пакетах. [17] Источник уязвимостей безопасности был взят из отчетов, найденных на Node Security Platform (NSP), и был интегрирован с npm с момента приобретения NSP компанией npm. [18]

Реестр

Пакеты в реестре находятся в формате ECMAScript Module (ESM) или CommonJS и включают файл метаданных в формате JSON . [19]

В основном реестре npm доступно более 3,1 миллиона пакетов. [20]

Реестр не имеет процесса проверки для отправки, что означает, что пакеты, найденные там, потенциально могут быть низкого качества, небезопасными или вредоносными. [19] Вместо этого npm полагается на отчеты пользователей, чтобы удалять пакеты, если они нарушают политику, будучи низкого качества, небезопасными или вредоносными. [21] npm предоставляет статистику, включая количество загрузок и количество зависимых пакетов, чтобы помочь разработчикам оценить качество пакетов. [22]

Внутри npm использует базу данных NoSQL Couch DB для управления общедоступными данными. [23]

Безопасность и нарушение

левая панель

В марте 2016 года пакет под названием left-padбыл отменен из-за спора об имени между Азером Кочулу, индивидуальным инженером-программистом, и Kik . [24] [25] Пакет был чрезвычайно популярен на платформе, от него зависели тысячи проектов, и до его удаления было достигнуто 15 миллионов загрузок. [24] [26] Несколько проектов, критически важных для экосистемы JavaScript, включая Babel и Webpack, зависели от него left-padи стали непригодными для использования. [27] Хотя пакет был повторно опубликован три часа спустя, [28] он вызвал массовые сбои, заставив npm изменить свою политику в отношении отмены публикации, чтобы предотвратить подобное событие в будущем. [29]

мирневойна

В марте 2022 года разработчик Брэндон Нозаки Миллер , сопровождающий node-ipcпакет, добавил peacenotwarв качестве зависимости к пакету; peacenotwarрекурсивно перезаписывает содержимое жесткого диска пораженной машины эмодзи сердца , если у них есть белорусский или российский IP-адрес. Пакет также оставляет на машине текстовый файл , содержащий сообщение в знак протеста против вторжения России в Украину . Vue.js , который использует node-ipcв качестве зависимости , не прикрепил свои зависимости к безопасной версии, что означает, что некоторые пользователи Vue.js стали жертвами вредоносного пакета, если зависимость была извлечена как последний пакет. [30] [31] Уязвимая зависимость также недолго присутствовала в версии 3.1 Unity Hub ; однако в тот же день было выпущено исправление для устранения проблемы. [32]

Другие примечательные инциденты

В ноябре 2018 года было обнаружено, что вредоносный пакет был добавлен в качестве зависимости к версии 3.3.6 популярного пакета event-stream. [33] Вредоносный пакет, называемый flatmap-stream, содержал зашифрованную полезную нагрузку, которая крал биткойны из определенных приложений. [34]

В мае 2021 года pac-resolverбыло обнаружено, что пакет npm, который загружался более 3 миллионов раз в неделю, имеет уязвимость удаленного выполнения кода . [35] Уязвимость возникла из-за того, как пакет обрабатывал файлы конфигурации, и была исправлена ​​в версиях 5 и выше. [36]

В январе 2022 года сопровождающий популярного пакета colorsотправил изменения, печатая мусорный текст в бесконечном цикле. [26] Сопровождающий также очистил репозиторий другого популярного пакета, faker, и его пакет на npm, и заменил его README, который гласил: «Что на самом деле случилось с Аароном Шварцем[37]

В мае 2023 года было обнаружено, что несколько пакетов npm, включая , bignumбыли использованы для кражи учетных данных пользователей и информации с пострадавших машин. Исследователи обнаружили, что эти пакеты были скомпрометированы с помощью эксплойта, включающего Amazon S3 buckets и node-gypинструмент командной строки. [38]

Альтернативы

Существует ряд альтернатив npm с открытым исходным кодом для установки модульного JavaScript, включая pnpm , Yarn , [39] Bun и Deno . Deno и Bun также предоставляют среду выполнения JavaScript, в то время как только Deno работает независимо от реестра NPM или любого централизованного репозитория [40], и его поддержка реестра NPM все еще является предметом продолжающейся работы по состоянию на январь 2024 года. [41] Все они совместимы с публичным реестром npm и используют его по умолчанию, но предоставляют различные возможности на стороне клиента, обычно ориентированные на улучшение производительности и детерминизма по сравнению с клиентом npm. [42]

Смотрите также

Ссылки

  1. ^ "GitHub, принадлежащий Microsoft, приобретает менеджер пакетов JavaScript Npm". GeekWire . 17 марта 2020 г.
  2. ^ "Самые ранние выпуски npm". GitHub . Получено 5 января 2019 г.
  3. ^ "Release 10.9.0". 3 октября 2024 г. Получено 22 октября 2024 г.
  4. ^ Диркс, Питер (30 марта 2016 г.). «Руководство для начинающих по npm – Node Package Manager». sitepoint . Получено 22 июля 2016 г. .
  5. ^ "npm". npm . 15 мая 2024 г. Архивировано из оригинала 14 мая 2024 г.
  6. Шлютер, Исаак З. (25 марта 2013 г.). «Забудьте о CommonJS. Он мертв. **Мы — серверный JavaScript.**». Гитхаб .
  7. ^ "NPM/Cli". GitHub .
  8. ^ Чан, Розали. «Брайан Богенсбергер, генеральный директор стартапа JavaScript Package Startup NPM, уходит в отставку». Business Insider . Business Insider . Получено 30 июня 2021 г. .
  9. ^ Чан, Розали. «Соучредитель и директор по данным NPM Лори Восс уходит в отставку». Business Insider . Business Insider . Получено 30 июня 2021 г. .
  10. ^ Эллингвуд, Джастин. «Как использовать npm для управления пакетами Node.js на сервере Linux». DigitalOcean . Получено 22 октября 2016 г.
  11. ^ "npm-install". docs.npmjs . Получено 22 октября 2016 г. .
  12. ^ "semver". docs.npmjs . Архивировано из оригинала 3 декабря 2016 . Получено 22 октября 2016 .
  13. ^ "npm-version". docs.npm . Получено 29 октября 2016 г. .
  14. ^ Коирала, Шивпрасад (21 августа 2017 г.). «Для чего нужен package-lock.json в Node?». codeproject .
  15. ^ Ampersand.js. "Ampersand.js – Learn". ampersandjs.com . Получено 22 июля 2016 г. .
  16. ^ "Критические разрешения файловой системы Linux изменяются последней версией". GitHub . Получено 25 февраля 2018 г. .
  17. ^ npm. "'npm audit': identify and fix insecure dependencies". Блог npm . Получено 14 августа 2018 г.
  18. ^ npm. "Служба Node Security Platform закрывается 9/30". Блог npm . Получено 14 августа 2018 г.
  19. ^ ab Ojamaa, Andres; Duuna, Karl (2012). «Оценка безопасности платформы Node.js». Международная конференция по интернет-технологиям и защищенным транзакциям 2012 года . IEEE. ISBN 978-1-4673-5325-0. Получено 22 июля 2016 г.
  20. ^ "npm | Главная". npmjs.com . Получено 27 июня 2024 г. .
  21. ^ "npm Code of Conduct: Acceptable Package Content" . Получено 9 мая 2017 г. .
  22. ^ Ворбах, Пол. "npm-stat: статистика загрузки пакетов NPM". npm-stat.com . Архивировано из оригинала 11 августа 2016 г. Получено 9 августа 2016 г.
  23. ^ "registry | npm Docs". docs.npmjs.com . Получено 10 мая 2021 г. .
  24. ^ ab Williams, Chris. «Как один разработчик сломал Node, Babel и тысячи проектов в 11 строках JavaScript». The Register . Получено 17 апреля 2016 г.
  25. ^ Коллинз, Кит (27 марта 2016 г.). «Как один программист сломал интернет, удалив крошечный фрагмент кода». Quartz . Получено 23 декабря 2020 г.
  26. ^ ab Sharma, Ax (27 июля 2022 г.). «Протестное ПО на подъеме: почему разработчики саботируют собственный код». TechCrunch . Получено 11 мая 2024 г.
  27. ^ «Как 17 строк кода уничтожили самые популярные стартапы Кремниевой долины». HuffPost . 24 марта 2016 г. Получено 11 мая 2024 г.
  28. ^ "kik, left-pad, and npm" . Получено 9 мая 2017 г. .
  29. ^ "изменения в политике отмены публикации". Блог npm (Архив) . Получено 23 января 2022 г.
  30. ^ "БОЛЬШОЙ саботаж: Известный пакет npm удаляет файлы в знак протеста против войны на Украине". Bleeping Computer . Получено 17 марта 2022 г. .
  31. ^ Юха Сааринен (17 марта 2022 г.). «Зависимость пакета npm 'Protestware' отмечена как атака на цепочку поставок». IT News . nextmedia .
  32. ^ Proven, Liam (18 марта 2022 г.). «Библиотека JavaScript обновлена ​​для удаления файлов с российских компьютеров». The Register . Situation Publishing. Архивировано из оригинала 18 марта 2022 г. Получено 18 марта 2022 г.
  33. ^ Гудин, Дэн (26 ноября 2018 г.). «Широко используемое программное обеспечение с открытым исходным кодом содержало бэкдор для кражи биткойнов». Ars Technica . Получено 11 мая 2024 г.
  34. ^ Клэберн, Томас. «Проверьте свои репозитории... Код для кражи криптовалют проник в довольно популярную библиотеку NPM (2 млн загрузок в неделю)». www.theregister.com . Получено 11 мая 2024 г.
  35. ^ Шарма, Акс (2 сентября 2021 г.). «Пакет NPM с 3 миллионами еженедельных загрузок имел серьезную уязвимость». Ars Technica . Получено 11 мая 2024 г.
  36. ^ Клэберн, Томас. «Библиотека JavaScript, загружаемая 3 млн раз в неделю, подвергает приложения риску взлома через вредоносные конфигурации прокси». www.theregister.com . Получено 11 мая 2024 г.
  37. ^ "Dev повреждает библиотеки NPM 'colors' и 'faker', ломая тысячи приложений". Bleeping Computer . Получено 9 января 2022 г.
  38. ^ Берт, Джефф. «Захваченные контейнеры S3 используются при атаках на пакеты npm». www.theregister.com . Получено 11 мая 2024 г.
  39. ^ "Hello, Yarn!". Блог npm . 11 октября 2016 г. Получено 17 декабря 2016 г.
  40. ^ "Управление зависимостями". Deno Docs . Получено 6 января 2024 г.
  41. ^ "Node и npm modules | Deno Docs". docs.deno.com . Получено 16 января 2024 г. .
  42. ^ Кац, Йехуда (11 октября 2016 г.). «Почему я работаю над Yarn» . Получено 17 декабря 2016 г.

Внешние ссылки