Коммит 08883cbdd1c39a0c15b97af44ddaefe14acdc21a нарушил рендеринг в Discourse на старых выпусках Gecko. В версиях Gecko ранее 74 оператор optional chaining не поддерживается.
Возможно, я ошибаюсь, но первоначальное предположение состоит в том, что мы не определяем список браузеров, и используется значение по умолчанию (скорее всего, @babel/preset-env · Babel), которое не считает эту версию поддерживаемой, поэтому код не транспилируется.
Это странно, ведь Firefox 74 — всего лишь годичной давности, но посмотрим на текущий список браузеров:
Теперь вопрос: @sam, хотим ли мы это поддерживать? Хотя версии всего год, текущая версия Firefox — 89, то есть эта версия отстает на 15 релизов. Не уверен, решение за вами. Важно учитывать, что поддержка этой версии увеличит размер полезной нагрузки для всех, поскольку транспиляция работает примерно как полифилл (добавление некоторых функций для поддержки этой версии и замена синтаксиса на вызовы функций).
Причин много, но в основном это упрощает работу разработчикам: не нужно слишком много думать о том, что можно использовать, а что нет, и при этом мы получаем довольно современную основу.
Я не против отказаться от поддержки, при условии, что у нас есть HTML-резервный вариант.
Одно мы точно не можем сделать: показывать работающую статическую страницу в IE9, но сломанную — в Firefox одного года выпуска.
Я предпочитаю просто транспилировать код под Firefox/Chrome возрастом 2–3 года, но готов оставить это решение за @eviltrout и вами. Мы можем быть более агрессивными, но не можем показывать сломанные страницы.
Редакция: см. обратную ссылку. Это может стать довольно серьёзной проблемой на Android, где обновление браузеров часто происходит с большим запозданием.
Я не могу воспроизвести проблему OP на meta. Я пробовал через Browserstack с использованием Firefox 73 на macOS и Firefox 68 на Windows. @vige, ты можешь воспроизвести проблему на meta?
Поправьте меня, если я ошибаюсь, @pmusaraj, но, поскольку мы не задаём preset-env и, как следствие, не определяем цели, применяются все включённые плагины. В результате proposal-optional-chaining точно будет применён.
Меня это устраивает, возможно, нам просто нужно ежегодно проверять каждый плагин и решать, всё ещё ли он нужен?
Огромное спасибо всем разработчикам за то, что так быстро исправили это!
К сведению, по моим тестам, эта ошибка в некоторых случаях также затрагивала последнюю версию Microsoft Edge для Android (которая, насколько мне известно, не использует движок Gecko).
Не могли бы вы добавить тег v2.7.4 к этому релизу?
Я потратил полчаса, пытаясь выполнить git checkout v2.7.4, но оказалось, что такого тега не существует