Как npm стал самым популярным пакетным менеджером в мире



    Со вступительной речью на конференции Node.js Interactive выступила Эшли Уильямс (Ashley Williams, она же @ag_dubs), менеджер сообщества разработчиков и контента в npm. Она рассказала о текущем состоянии дел в компании и рассказала, как фирма зарабатывает деньги. На самом деле npm — это коммерческая компания, которая получает прибыль от предоставления корпоративных услуг. Этого дохода достаточно, чтобы поддерживать деятельность в качестве нормальной компании, платить зарплату персоналу (сейчас в компании 23 сотрудника), и ещё остаётся на поддержку бесплатного репозитория пакетов npm.

    Немного статистики. За последние 28 дней пользователи npm установили 18 млрд пакетов. Для установки этих пакетов им потребовалось скачать 6 млрд пакетов из репозитория. Примерно две трети установок обошлись без скачивания пакетов, а были выполнены из кэша. Вот как выглядит график количества скачиваний за 28 дней, с 2013 года.



    На бурный рост npm указывает и количество опубликованных в репозитории пакетов в неделю. На графике — статистика за последние два года. Если в начале 2015 года в репозитории публиковалось менее 12 500 пакетов в неделю, то самая последняя статистика в январе 2017 года — 39 692 пакета.



    Почти 40 000 пакетов всего за одну неделю.

    Далее — статистика по новым пакетам (тоже еженедельная) за два года. Из неё исключены обновления старых пакетов.



    На графике обращают на себя четыре потрясающих пика в первой половине 2016 года и один провал в декабре 2015 года. Эшли Уильямс затруднилась объяснить, чем объясняются эти аномалии: «Наверное, многие разработчики были взбудоражены в то время», — предположила она с улыбкой.

    Всего за одну последнюю неделю в репозиторий загрузили 4685 новых пакетов.

    Кроме статистики по пакетам, интересно посмотреть на то, как растёт сообщество open source через призму репозитория npm. Каждую неделю примерно 160 человек публикуют в npm свой первый пакет — без учёта новых версий пакетов, а именно свой первый пакет. Настолько увеличивается сообщество open source, ведь с большой долей вероятности это их первые пакеты в жизни.

    Всего в репозитории npm сейчас насчитывается 102 460 активных «издателей» (авторов пакетов). Это тоже немалое количество.

    Ниже статистика по количеству новых регистраций пользователей.



    На сегодняшний день в npm зарегистрировано 314 582 пользователя. Как понятно из предыдущих цифр, примерно каждый третий зарегистрированный пользователь является активным издателем и автором пакета или нескольких пакетов.

    Сотрудница npm не обошла вниманием скандальную историю с пакетом left-pad — 11 строками кода, «которые поломали интернет».

    Напомним, в марте 2016 года Веб-разработчик Азер Кочулу (Azer Koçulu), автор более 250 модулей для Node.js, попал в неприятную ситуацию. Он получил письмо от юриста компании Kik (мессенджер) с требованием отозвать модуль с аналогичным названием kik из npm. Программист отказался, тогда юрист обратился напрямую в компанию npm, и она сменила владельца kik без разрешения автора. Разработчик со злости решил отозвать все свои модули — более 250 штук. К сожалению, среди них оказался и left-pad — маленький модуль из 11 строк кода на JavaScript. Несмотря на простоту модуля, в тысячах приложений менеджер npm теперь не мог установить зависимости между пакетами.

    Эшли Уильямс сказала, что компания осознала всю серьёзность проблемы и принесла свои глубочайшие извинения, а буквально через неделю после той истории подготовила новые правила снятия пакетов из репозитория. По новым правилам, вы имеете право снять пакет только в течение 24 часов. После этого времени отзыв допускается только с разрешения администрации. Служба поддержки проверит, не ломает ли этот модуль какие-нибудь зависимости в других пакетах. Если ломает, то отзыв запрещают. В этом случае управление или отдадут другому разработчику, или постараются связаться с автором того пакета, где есть лишняя зависимость.

    Новая политика npm и история с left-pad вызвала живой отклик сообщества — на Github в комментариях отметились тысячи авторов, которые высказали своё мнение об этом. Многие авторы захотели удалить свои пакеты.

    В ответ компания внедрила новую политику отказа от прав на пакеты (dissociate and deprecate), чтобы авторы могли оставить пакет, просто убрав своё имя из реестра для пакета, который больше не хотят поддерживать.

    Таким образом была решена проблема с ломкой зависимостей между тысячами пакетами во всей экосистеме npm в случае удаления какого-то одного модуля. «Теперь реестр неуязвим», — подвела итог Эшли Уильямс. Катастрофы по примеру left-pad больше не произойдёт. Компания также подчёркивает высокий процент аптайма реестра (статистика в реальном времени показывается на ping.npmjs.com) и высокую производительность npm, которая в несколько раз превосходит производительность, например, git.



    При пустом кэше npm примерно на 75% быстрее git.

    Популярность JavaScript объясняет быстрый рост реестра npm и тот факт, что к настоящему времени npm ещё в 2014 году стал самым популярным пакетным менеджером в мире. Сейчас по количеству пакетов он более чем вдвое превосходит ближайший пакетный менеджер Maven Central (Java).



    Несмотря на статус крупнейшего пакетного менеджера в мире, npm ещё видит перспективы для роста. В конце концов, в мире примерно 18 миллионов программистов, а 85% из них пишут на JavaScript (в каком-то смысле хотя бы частично). Это означает, что в мире примерно 15 миллионов разработчиков на JavaScript. Сейчас не более 50% из них используют npm (около 5,7 млн пользователей), так что перспективы для роста есть.

    Исследование показало, что 80% пользователей npm занимаются разработкой фронтеда, 60% — разработкой бэкенда. Изучение вопроса показало также, что люди используют npm для совершенно невероятных вещей, для которых он не был рассчитан и которые не приходили в голову создателям сервиса.

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 26

    • НЛО прилетело и опубликовало эту надпись здесь
        +3

        Только ленивый не сказал про isarray.

            +3
            Кажется, уже наступил тот момент, когда проще выучить js и все его подводные камни, чем искать модули)
          0

          Процедура публикации пакета в maven central очень бюрократичная и не простая, требующая времени. Это ограничивает количество пакетов, которые там имеются и очень сильно. В npm и во многих других репозиториях все намного проще и быстрее.

            0
            В JCenter гораздо проще, многие сейчас только в нем пакеты публикуют.
            0
            А что там бюрократичного? По-моему всё очень просто.
            1. Регистрируетесь в jira
            2. Создаете тикет с заявкой на получение прав на groupId.

            После одобрения можете публиковать из maven/gradle в свой groupId всё что захотите всего парой команд.

            По факту потратите один раз 5 минут на создание заявки и подождете максимум день одобрения.
              0

              Надо ждать около суток их одобрения, потом повторно писать и снова ждать около суток после того как зальете первую релизную версию.

                0
                Ну хз, мне всегда отвечали за пару часов. Но даже если два раза по сутки — это делается 1 раз, потом вы паблишите туда практически мгновенно столько артефактов, сколько захотите.
            +1
            Интересно было бы посмотреть статистику: какое количество, из этих сотен тысяч пакетов, скачали хотя бы 1, 10 или 100 раз.

            А то загрузить можно много всего. Но найти что-то нужное потом в этой куче очень сложно.

            А то получается как в анектдоте: я могу 600 знаков в минут печатать, но какая-то ерунда получается.
              0
              Всего за одну последнюю неделю в репозиторий загрузили 4685 новых пакетов.
              Сколько велосипедов всего за одну неделю.
              «Теперь реестр неуязвим», — подвела итог Эшли Уильямс
              Теперь мы можем отобрать ваш пакет в любое время, а вы сидите и молчите в тряпочку.
                0
                Интересно сколько из этих 4685 загрузили пользователи себе из репозитория хотя бы 1 раз?
                Ну может быть 2 раза. 1 раз обычно скачивает автор, который проверял как скачивается пакет :)
              +1
              Думаю, что такое кол-во связано с тем, что установив пакет, который условно ставить точку в конце строки, если ее там нет, то он за собой еще 200 пакетов затянет т.к. тот, кто писал устанавливаемый пакет был рукожопом. Вот и имеет огромное кол-во скачиваний, а нужны ли они? Этим вопросом никто не задается сейчас.

              Прощай карма, ты была мне как родная :)
                0
                Думаю, многие скачивания связаны с CI/CD автоматизацией. Скажем, мною инициируется минимум 1000 скачиваний в день, путём отправки в репозиторий десятка коммитов. Хотя, по сути, не каждую неделю нужно что-то скачивать, особенно после перехода на yarn. Но оптимизировать процессы автоматических билдов ресурсов нет.
                +1
                Наверное, многие разработчиков были взбудоражены в то время

                Чего?
                  0
                  Заголовок правильный. Именно популярный. Не полезный, не качественный, а просто популярный. Худшее, чем можно похвастаться.
                    +2
                    > Как npm стал самым популярным пакетным менеджером в мире

                    Очень просто. Он стал считать количество пакетов, а не количество байт. Ведь главное — это правильно считать, и тогда получится правильный результат.
                      +1
                      >>люди используют npm для совершенно невероятных вещей, для которых он не был рассчитан и которые не приходили в голову создателям сервиса

                      Хотелось бы списочек невероятных вещей… регулярно обновляемый конечно… с новостной рассылкой — если кто-то изобрел велосипед, почему-бы им не воспользоваться другому изобретателю велосипедов?
                        0
                        Настолько увеличивается сообщество open source, ведь с большой долей вероятности это их первые пакеты в жизни.

                        Что?

                        И вы правда не задумывались над тем, что количество установок пакетов — не самый корректный показатель? Тем более для npm.
                          +1

                          Так это правда, доля программистов, которые всерьёз занимаются разработкой библиотек, довольно мала во всех языках. Но если в других языках остальные просто не публикуют никаких пакетов, то npm поставил своей целью, чтобы каждый, кто хоть неделю изучал JS, обязательно опубликовал какой-нибудь пакет. Они так прямо и говорят: хотим 15 миллионов авторов в npm и пофиг, что программистов в мире всего 18 миллионов. Можешь хотя бы пару строчек на JS написать — срочно делай пакет, мы ждём тебя!

                            +2

                            Так это и ок. Вон на гитхабе огромное количество реп, но нет тех кто воет, что гитхаб — помойка. npm хранилище пакетов, а не поисковик релевантных и самых правильных.

                              +2

                              Думаю, что проблема в том, что npm пытаются сравнивать с Maven, PyPI или RubyGems, в которых мусор не приветствуется. В npm же Эшли Уильямс (да и не только она) практически призывает постить всё подряд. По факту никому не интересно сколько пакетов в хранилище. Интересно сколько из них полезных… Это косвенно можно оценить по количеству скачиваний за месяц, допустим более 100 или более 1000 раз.
                              В принципе, даже если просто исходить из предпосылки, что полезный пакет решает какую-то обобщенную практическую задачу, то их количество ограниченно сверху тысячами, пусть будут представлены разные подходы к решению каждой задачи — всё равно остаётся ограничение в десятки тысяч. Всё что сверх этого, либо устаревшие пакеты, либо тот самый мусор, который всё же есть везде, просто в меньшем процентном соотношении. Чтобы показать крутость npm надо не циферками меряться, а составить список практических задач, для которых есть решения в npm, а в других хранилищах подобных пакетов нет.
                              Впрочем, тут есть ещё один феномен npm, который заключается в моде на пакеты с одной/двумя функциями. Это не укладывается в привычное понимание библиотеки, поэтому если сравнивать с другими хранилищами пакетов, то такие пакеты надо считать отдельно. Иначе какой смысл сравнивать тёплое с мягким на графиках?

                          0
                          Как дела у Yarn? В каком он состоянии относительно npm?
                            +1

                            Yarn же утилита для быстрой доставки пакетов, а пакетная база = npm.

                            0
                            Что-то я впервые про него слышу.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое