Использует ли React Native Babel по умолчанию или это только один из вариантов?

Я знаю, что между React Native и Babel есть какая-то связь.

В чем я не уверен, так это в том, есть ли он только там, если я хочу его использовать, и я должен каким-то образом включить его, или RN всегда транспилируется с Babel.

Он должен так или иначе транспилироваться, поскольку RN использует JSX, который не является родным для любого JS-движка.

Это заставляет меня думать, что маловероятно, что будет несколько путей транспиляции, один только для JSX и один для комбинации Babel + JSX.

Причина, по которой я спрашиваю, заключается в том, что я нашел новую функцию JS String.fromCodePoint(), который работает на Android, но не на iOS.

Это потому, что транспиляция не пытается охватить все современные функции JS? Потому что это ошибка, о которой я должен сообщить? Что-то, с чем не справляется обычный транспилятор React Native, а с Babel?

Какова именно величина моего непонимания? (-:


person hippietrail    schedule 03.09.2017    source источник
comment
Транспиляция покрывает синтаксис, для фич есть полифиллы.   -  person pawel    schedule 04.09.2017
comment
@pawel: Вы говорите, что Babel стремится сделать только одно из двух?   -  person hippietrail    schedule 04.09.2017
comment
Ядро Babel переводит синтаксис, проект Babel также разрабатывает полифил babeljs.io/docs/usage/polyfill но я никогда не использовал его, я предпочитаю использовать полифиллы для определенных функций, которые не работают в моих целевых средах. Одним из примеров является то, что [..."string"] транспилируется в код с использованием Array.from, но вам может понадобиться полифилл, чтобы транспилированный код работал в старых браузерах, которые не реализуют этот метод Array.   -  person pawel    schedule 04.09.2017


Ответы (1)


Ты прав. React Native транспилируется с помощью Babel. Вы можете увидеть здесь все преобразователи babel, используемые для .

Я не верю, что вы можете избежать использования babel, но если вы хотите добавить преобразователи и плагины, вы можете использовать свой собственный файл .babelrc. Однако вам все равно понадобятся преобразователи, которые использует React Native, поэтому для упрощения вы можете просто использовать реактивный пресет babel, который объединяет для вас все преобразователи, необходимые для реагирования. Дополнительные трансформаторы вам нужно будет установить и настроить самостоятельно.

person Gershon Papi    schedule 03.09.2017
comment
Спасибо! Я ничего не знаю об этих преобразователях и плагинах, о которых вы говорите, но это означает, что мой следующий вопрос заключается в том, должен ли Babel реализовывать каждую функцию es6, и должен ли я и как я должен поддерживать неподдерживаемую функцию, с которой я столкнулся: String.fromCodePoint - person hippietrail; 03.09.2017
comment
По сути, Babel-трансформер добавляет поддержку функции, которая в настоящее время не поддерживается, и преобразует ее в обычный javascript. Плагины babel — это просто набор преобразователей. Я считаю, что String.fromCodePoint можно было бы поддержать, добавив предустановку es-2015, но я не совсем уверен, я предлагаю вам больше узнать о Babel и о том, какие трансформаторы он может предложить. - person Gershon Papi; 03.09.2017