Бесплатно Экспресс-аудит сайта:

28.04.2020

Обновление для JavaScript-библиотеки «сломало» часть JavaScript-экосистемы

Обновление для библиотеки JavaScript на прошлых выходных повергло в хаос большую часть JavaScript-экосистемы, причинив головную боль разработчикам миллионов проектов. Абсурдность ситуации заключается в том, что весь сыр-бор разгорелся из-за крошечной JavaScript-библиотеки, состоящей всего из двух строк (так называемый one-liner).

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

На прошлых выходных is-promise была обновлена, чтобы исполнять роль ES-модуля – стандартизированной модульной системы в языке JavaScript. Тем не менее, версия is-promise 2.2.0 не соответствовала надлежащим стандартам ES-модуля. Из-за неправильной реализации поддержки ES-модуля сразу после выхода обновления проекты, использовавшие is-promise в своей цепочке сборки, начали давать сбои.

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

Ошибка не привела к сбою существующих проектов, поэтому простоев не было, но разработчики не смогли скомпилировать новые версии своих проектов.

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