Нужно что-то придумать, чтобы остановить это безумие, но что? У меня есть идея. Помните историю с left-pad? Неплохо бы устраивать такое почаще.

Предлагаю вознаграждение настоящими деньгами всем, кто удалит свой модуль npm. Точная сумма будет рассчитываться по приведенной формуле; она предполагает, что модули с большим количеством скачиваний и малым числом строк кода будут оцениваться выше. Есть еще одно условие: модуль вы должны удалить без предупреждения, чтобы все, кто от него зависят, просто проснулись и обнаружили поломанный билд.
Давайте рассмотрим isArray в качестве примера. Там всего четыре строки кода.
var toString = {}.toString;
module.exports = Array.isArray || function (arr) {
return toString.call(arr) === '[object Array]';
};
Если учесть, что число скачиваний составляет 51 миллион, получается итоговая сумма в 710 $.
Чтобы избежать мошенничества, согласовывать каждое удаление мы должны заранее. Я ознакомлюсь с вашим модулем, чтобы убедиться, что он соответствует требованиям и проверить, нет ли там чего подозрительного – например, накрутки в скачиваниях или минификации в коде. Удалять модуль можно только после того, как мы обо всем договоримся, иначе я уже не смогу узнать число скачиваний и строк.
Возможно, я попрошу вас немного подождать с удалением, чтобы между исчезновениями модулей и сопутствующими вспышками хаоса проходило по несколько недель – это нужно, чтобы добиться максимального эффекта. И наконец, сумма выплат в каждом случае будет составлять не более 1000 $, а то жить мне тоже на что-то надо.
Ну что, по рукам? Подать заявку можно здесь.
Ну ладно, шутки в сторону – это несерьезный пост. Я не собираюсь платить вам деньги за удаление модулей npm и погружать экосистему Node в мрачную эпоху смуты тоже не планирую. Тем более что это все равно не сработало бы.
Но я надеюсь, что сама мысль породила страх в сердцах многих разработчиков на Node, которые читали этот текст, а также представителей тех сообществ, которые последовали их примеру. Что вы будете делать, если одна из зависимостей исчезнет? Что если кто-нибудь изучит минифицированный код у вас на сайте, откопает какую-нибудь богом забытую зависимость и подкупит людей, которые занимаются поддержкой?
Большинство разработчиков на Node не имеют представления, что творится у них в зависимостях. Многие из этих деревьев содержат тысячи элементов и никогда не проходили ревизию. Это безответственный подход и с этим нужно что-то делать.
В большей части моих проектов менее ста зависимостей; немало и таких, где их меньше десяти. В некоторых зависимостей нет вообще. Это не случайность. Как ни печально, платить приходится за всё, поэтому введение зависимости – это серьезное решение, которое обсуждается всей командой. Новая зависимость подвергается проверке, ее здоровье и прогнозы на будущее получают оценку, и в дальнейшем разработчики не жалеют времени на то, чтобы повторять этот процесс и при необходимости менять курс.
Комментарии (14)
Akuma
23.11.2021 11:28+1А то конкретно не так с npm?
Да, там 100500 пакетов и многие из них укладываются в пару строк. Ну так они и повторяются по тысяче раз на проект.
У меня своих проектов несколько и я каждый раз что-то копирую туда-сюда. А когда надо внести изменения - приходится делать это везде. А ведь есть npm и это удобнее.
gameplayer55055
23.11.2021 16:37+2Да от такого предложения даже Apple кони двинет. Давай создадим пирамиду: вы укажете всем друзьям программистам насколько npm плохой и скидываетесь деньгами. Удаляем модули, и наступает мировой коллапс экономики из-за бага с библиотекой в блокчейн сетях
NetBUG
26.11.2021 12:37Напоминает байку про уничтожение то ли змей, то ли крыс в Индии через систему вознаграждений от англичан
speshuric
23.11.2021 23:13+1Интересно, что по формуле может получиться и отрицательное вознаграждение (если количество строк превышает количество скачиваний в неделю).
trokhymchuk
25.11.2021 10:36Только эта проблема не специфична исключительно для нпм(хоть там она раскрывает себя наиболее красиво).
Что действительно стоит делать, так объяснять, что пакеты типа isArray или left-pad не стоит не только использовать, но и писать.
ksbes
25.11.2021 15:23Я на JS программирую исключительно эпизодически. И мне стало интересно:
Есть ли модули-паки? Т.е. вообще без кода, но которые собирают, например, все "правильные" зависимости для работы с векторами?
А есть ли вообще такая возможность - не ставить кучу хрен-знает-каких зависимостей? Особенно когда работаешь с каким-нибудь фреймворком вроде react + ...?
ddidwyll
25.11.2021 23:20+1А есть ли вообще такая возможность
Могу сказать, что когда работаешь со svelte - вполне нормально иметь пустой dependencies (на больших и сложных проектах одна - две зависимости обычно всё таки есть), правда в devDependencies будет сам svelte и, возможно, какой-нибудь uikit.
13werwolf13
26.11.2021 10:35у меня есть решение посложнее, зато 100%
плати деньги конторам чтобы node в прод не пускали
всё, проблема решена (да и подозреваю так даже дешевле будет))
Blooderino
29.11.2021 12:22Очередно джун с комплексом Бога. Просто бери и проверяй пакеты, которые используешь, если тебя это так мучает.
YChebotaev
После инцидента с left-pad, npm приняла политику, согласно которой пакеты, у которых есть зависимые, или у которых более 300 скачиваний в неделю не могут быть удалены.
А чем ситуация с npm принципиально отличается от любого другого реестра пакетов? Того же apt, или pypi?
Что касается isarray. Ну мода такая была. Это даже считалось за бест-практайс. У комьюнити не было на что ориентироваться, кроме своего вкуса. Это сейчас Sebastian Markbage и рассказал как надо. А тогда не знали
Revertis
Просто читая тот же опеннет диву даёшься, сколько там находят модулей с троянами. Прям каждый месяц по пачке. Хотя вот недавно у питона так же нашли пачечку.
vitaly_il1
+1 - мне тоже интересно.
Я слабо знаком как управляются репо с библиотеками других языков.
На уровне Линукс репо (RPM / DPKG) каждый дистрибутив управляет репо для себя, так что разработчик не может удалить свой пакет. Естественно, часто "родных" репо нехватает, тогда используют дополнительные, и там уже может быть всякое.