Ответ 1
Babel является компилятором JavaScript-к-JavaScript, иногда называемым транспилером, который преобразует код, написанный с одним набором функций (например, в ES2015 и более поздних), в код, который можно запускать в среде JavaScript, которая не поддерживает эти функции. (Есть и другие, Вавилон - один из самых популярных).
Используете ли вы Babel для перевода вашего кода ES2015+ на ES5, полностью зависит от вас и зависит от того, какие целевые среды вы хотите поддерживать. Если вы хотите, например, поддерживать любую версию IE (включая IE11), вам нужно будет перекрыть. Если вам нужно только поддерживать самые современные Chrome, Firefox и Edge или другие среды, где вы можете рассчитывать на те функции, которые вы используете (например, на современные установки Node.js), вы этого не делаете.
У Kangax есть набор удобных таблиц, для которых используются движки JavaScript и/или браузеры, какие из более современных функций JavaScript (а не только ES2015, но ES2016, ES2017 и т.д.).
Вавилон (и инструменты, подобные ему) полезны помимо использования только самых недавно стандартизованных функций по крайней мере двумя способами:
-
Вы можете использовать Babel (и аналогичный), чтобы воспользоваться преимуществами функций, которые, скорее всего, будут стандартизированы в ближайшее время, хотя они пока не очень хорошо поддерживаются. Например, основы открытых классов классов не изменились в течение длительного времени, но предложение, в котором они находятся, по- прежнему (начиная с этого письма в июне 2018 года) на этапе 3 (и было между и вторым этапом 2 и Этап 3 пару раз) по причинам, не связанным с полями общедоступного класса, и даже не самые современные браузеры, такие как Chrome, Firefox и Edge, поддерживают поля public class. Но в наши дни, как правило, использовать поля классов через транспилер.
-
Вы можете написать собственное преобразование Babel (или аналогичного), чтобы добавить свои собственные функции в JavaScript для вашего собственного проекта (или использовать записи других людей), даже если эти функции никогда не будут частью JavaScript или использованы вне вашего проекта.