НПМ
Оригинальный автор(ы) | Исаак З. Шлютер |
---|---|
Разработчик(и) | npm, Inc. (дочерняя компания GitHub , [1] дочерняя компания Microsoft ) |
Первоначальный выпуск | 12 января 2010 г [2] |
Стабильная версия | 10.8.0 [3] / 15 мая 2024 г. |
Репозиторий | |
Написано в | JavaScript |
Платформа | Кросс-платформенный |
Тип | Менеджер пакетов |
Лицензия | Художественная лицензия 2.0 |
Веб-сайт | www |
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 — это JavaScript-замена pm, сценария оболочки . [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 (ESM) или CommonJS и включают файл метаданных в формате JSON . [19]
В основном реестре npm доступно более 1,3 миллиона пакетов. [20]
В реестре не предусмотрен какой-либо процесс проверки отправки, а это означает, что найденные там пакеты потенциально могут быть низкого качества, небезопасными или вредоносными. [19] Вместо этого npm полагается на отчеты пользователей, чтобы удалять пакеты, если они нарушают политики из-за низкого качества, небезопасности или вредоносности. [21] npm предоставляет статистику, включая количество загрузок и количество зависимых пакетов, чтобы помочь разработчикам оценить качество пакетов. [22]
Внутри npm использует базу данных NoSQL Couch для управления общедоступными данными. [23]
Безопасность и разрушение [ править ]
левая панель [ править ]
В марте 2016 года пакет под названием left-pad
был неопубликован в результате спора об именах между Азером Кочулу, индивидуальным инженером-программистом, и Киком . [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 и корзин node-gyp
инструмент командной строки. [38]
Альтернативы [ править ]
Существует ряд альтернатив npm с открытым исходным кодом для установки модульного JavaScript, включая Yarn , [39] Бун и Дено . Deno и Bun также предоставляют среду выполнения JavaScript, но только Deno работает независимо от реестра NPM или любого централизованного репозитория. [40] и по состоянию на январь 2024 года поддержка реестра НПМ все еще является предметом продолжающейся работы. [41] Все они совместимы с общедоступным реестром npm и используют его по умолчанию, но предоставляют разные возможности на стороне клиента, обычно направленные на повышение производительности и детерминированности по сравнению с клиентом npm. [42]
См. также [ править ]
Ссылки [ править ]
- ^ «GitHub, принадлежащий Microsoft, приобретает менеджер пакетов JavaScript Npm» . GeekWire . 17 марта 2020 г.
- ^ «Самые ранние выпуски npm» . Гитхаб . Проверено 5 января 2019 г.
- ^ «Выпуск 10.8.0» . 15 мая 2024 г. Проверено 23 мая 2024 г.
- ^ Диркс, Питер (30 марта 2016 г.). «Руководство для начинающих по npm — диспетчеру пакетов Node» . точка сайта . Проверено 22 июля 2016 г.
- ^ "НПМ" . НПМ . 15 мая 2024 года. Архивировано из оригинала 14 мая 2024 года.
- ^ Шлютер, Исаак З. (25 марта 2013 г.). «Забудьте о CommonJS. Он мертв. **Мы — серверный JavaScript.**» . Гитхаб .
- ^ «НПМ/Кли» . Гитхаб .
- ^ Чан, Розали. «Брайан Богенсбергер, генеральный директор JavaScript Package Startup NPM, уходит в отставку» . Бизнес-инсайдер . Бизнес-инсайдер . Проверено 30 июня 2021 г.
- ^ Чан, Розали. «Соучредитель NPM и директор по данным Лори Восс уходит в отставку» . Бизнес-инсайдер . Бизнес-инсайдер . Проверено 30 июня 2021 г.
- ^ Эллингвуд, Джастин. «Как использовать npm для управления пакетами Node.js на сервере Linux» . Цифровой Океан . Проверено 22 октября 2016 г. .
- ^ «npm-установить» . docs.npmjs . Проверено 22 октября 2016 г. .
- ^ «семвер» . docs.npmjs . Архивировано из оригинала 3 декабря 2016 года . Проверено 22 октября 2016 г. .
- ^ "npm-версия" . docs.npm . Проверено 29 октября 2016 г.
- ^ Койрала, Шивпрасад (21 августа 2017 г.). «Зачем нужен package-lock.json в Node?» . кодпроект .
- ^ Амперсанд.js. «Ampersand.js — Обучение» . ampersandjs.com . Проверено 22 июля 2016 г.
- ^ «Критические разрешения файловой системы Linux изменяются в последней версии» . Гитхаб . Проверено 25 февраля 2018 г. .
- ^ нпм. « Аудит npm: выявление и исправление небезопасных зависимостей» . Блог npm . Проверено 14 августа 2018 г.
- ^ нпм. «Служба Node Security Platform закрывается 30 сентября» . Блог npm . Проверено 14 августа 2018 г.
- ↑ Перейти обратно: Перейти обратно: а б Оямаа, Андрес; Дууна, Карл (2012). «Оценка безопасности платформы Node.js» . 2012 Международная конференция по интернет-технологиям и защищенным транзакциям . IEEE. ISBN 978-1-4673-5325-0 . Проверено 22 июля 2016 г.
- ^ Насри, Ахмад (14 апреля 2020 г.). «Прощайте, и спасибо за все посылки!» . Блог npm . Проверено 6 января 2021 г.
- ^ «Кодекс поведения npm: приемлемое содержимое пакета» . Проверено 9 мая 2017 г.
- ^ Ворбах, Пол. «npm-stat: статистика загрузки пакетов NPM» . npm-stat.com .
- ^ «Реестр | Документы npm» . docs.npmjs.com . Проверено 10 мая 2021 г.
- ↑ Перейти обратно: Перейти обратно: а б Уильямс, Крис. «Как один разработчик только что сломал Node, Babel и тысячи проектов в 11 строках JavaScript» . Регистр . Проверено 17 апреля 2016 г.
- ^ Коллинз, Кейт (27 марта 2016 г.). «Как один программист сломал Интернет, удалив крошечный фрагмент кода» . Кварц . Проверено 23 декабря 2020 г.
- ↑ Перейти обратно: Перейти обратно: а б Шарма, Акс (27 июля 2022 г.). «Протестное ПО набирает обороты: почему разработчики саботируют собственный код» . ТехКранч . Проверено 11 мая 2024 г.
- ^ «Как 17 строк кода уничтожили самые горячие стартапы Кремниевой долины» . ХаффПост . 24 марта 2016 года . Проверено 11 мая 2024 г.
- ^ «кик, левая панель и npm» . Проверено 9 мая 2017 г.
- ^ «изменения в политике отмены публикации» . Блог npm (архив) . Проверено 23 января 2022 г.
- ^ «БОЛЬШОЙ саботаж: знаменитый пакет npm удаляет файлы в знак протеста против войны в Украине» . Пипящий компьютер . Проверено 17 марта 2022 г.
- ^ Юха Сааринен (17 марта 2022 г.). « Зависимость пакета npm 'Protestware', помеченная как атака на цепочку поставок» . Новости ИТ . следующиемедиа .
- ^ Провен, Лиам (18 марта 2022 г.). «Обновлена библиотека JavaScript для очистки файлов с российских компьютеров» . Регистр . Ситуация Издательство. Архивировано из оригинала 18 марта 2022 года . Проверено 18 марта 2022 г.
- ^ Гудин, Дэн (26 ноября 2018 г.). «Широко используемое программное обеспечение с открытым исходным кодом содержало бэкдор для кражи биткойнов» . Арс Техника . Проверено 11 мая 2024 г.
- ^ Клэберн, Томас. «Проверьте свои репозитории... Код для кражи криптовалют проникает в довольно популярную библиотеку NPM (2 миллиона загрузок в неделю)» . www.theregister.com . Проверено 11 мая 2024 г.
- ^ Шарма, Акс (2 сентября 2021 г.). «Пакет NPM с 3 миллионами загрузок в неделю имел серьезную уязвимость» . Арс Техника . Проверено 11 мая 2024 г.
- ^ Клэберн, Томас. «Библиотека JavaScript, загружаемая 3 миллиона раз в неделю, делает приложения уязвимыми для взлома с помощью злонамеренных конфигураций прокси-сервера» . www.theregister.com . Проверено 11 мая 2024 г.
- ^ «Разработчик портит «цвета» библиотек NPM и «фейкер» ломает тысячи приложений» . Пипящий компьютер . Проверено 9 января 2022 г.
- ^ Берт, Джефф. «Захваченные корзины S3 использовались при атаках на пакеты npm» . www.theregister.com . Проверено 11 мая 2024 г.
- ^ «Привет, Ярн!» . Блог npm . 11 октября 2016 года . Проверено 17 декабря 2016 г.
- ^ «Управление зависимостями» . Документы Дено . Проверено 6 января 2024 г.
- ^ «Модули Node и npm | Документы Deno» . docs.deno.com . Проверено 16 января 2024 г.
- ^ Кац, Иегуда (11 октября 2016 г.). «Почему я работаю на Yarn» . Проверено 17 декабря 2016 г.
Внешние ссылки [ править ]
- Программное обеспечение командной строки
- Бесплатные системы управления пакетами
- Бесплатное программное обеспечение, написанное на JavaScript.
- Инструменты программирования JavaScript
- бесплатное программное обеспечение Майкрософт
- Программное обеспечение, использующее лицензию Artistic.
- программное обеспечение 2010 года