Ошибка в двух строках кода обернулась авралом для миллионов проектов JavaScript

28 апрель, 2020 - 08:35

Ошибка в двух строках кода обернулась авралом для миллионов проектов JavaScript

«Кривое» обновление крошечной библиотеки в эту субботу погрузило значительную часть экосистемы JavaScript в состояние хаоса, нарушив работу миллионов программных проектов.

Ставшая причиной этого библиотека is-promise состоит из всего лишь двух строк исходного кода, выполняющих базовую проверку с булевым результатом (да-нет). Несмотря на крайнюю простоту, is-promise является одним из самых популярных на сегодняшний день npm-пакетов (библиотек) JavaScript. Согласно GitHub, эта библиотека входит в более чем 3,4 млн проектов и используется в качестве зависимости 766 другими библиотеками JavaScript.

На выходных is-promise была обновлена, чтобы получить поддержку для работы в качестве модуля ES (стандартизированная модульная система в языке JavaScript). Однако, как только это обновление (v2.2.0) вышло, проекты, которые использовали is-promise в своей цепочке сборки, начали давать сбои из-за неправильной поддержки модуля ES.

Эффект от этой ошибки почувствовался мгновенно не только для разработок с закрытой кодовой основой, но и для ряда величайших проектов экосистемы JavaScript, включая Create React App компании Facevpbook (стандартный шаблон для создания приложений React), Angular.js и инструментарий Firebasse от Google, Amazon AWS Serverless CLI, Nuxt.js, AVA и многие другие.

Как таковых, перебоев в работе этих проектов не было, однако из-за неполадки разработчики не могли компилировать новые версии своих продуктов.

Команда is-promise сразу же подготовила обновление, но не смогла устранить проблему, поэтому в итоге, спустя несколько часов, пришлось сделать откат, отказавшись от поддержки модуля ES в версии v2.2.2.

Нечто похожее произошло в марте 2016 г. Тогда автор другой мини-библиотеки JavaScript, состоявшей из 17 строк кода, внезапно отменил её публикацию, дезорганизовав работу тысяч проектов.

Очередной инцидент дал новую пищу для дискуссий о том, что модуляризация, возможно, зашла слишком далеко. Сторонники создания отдельных модулей для самых тривиальных операций считают это более приемлемым, чем альтернативу — когда тысячи разработчиков реализуют такие операции каждый на свой лад. Прения по модуляризации идут не один год и маловероятно, что они завершатся консенсусом в обозримом будущем.