Почему `@babel/transform-runtime` не заполняет `string.replace` для ребра 18?

#javascript #babeljs #microsoft-edge #babel-polyfill

#javascript #babeljs #microsoft-edge #babel-полизаполнение

Вопрос:

Судя по документам Babel, я могу полизаполнять свой код, используя либо @babel/preset-env , либо @babel/transform-runtime в моем конфигурационном файле babel.

@babel/preset-env с помощью useBuiltIns: usage добавим полизаполнение для string.replace случаев, когда мой целевой список браузеров включает Edge 18.

Использование @babel/transform-runtime вместо этого, string.replace похоже, не заполняется по-разному.

Я бы хотел использовать оба, но документы рекомендуют не делать этого:

введите описание изображения здесь

Должен ли я использовать @babel/preset-env ? Или является @babel/runtime более современным и, следовательно, не вводит string.replace polyfill?

Комментарии:

1. String.prototype.replace() существует уже целую вечность. Не могу представить, что для этого когда-либо понадобится полизаполнение

2. @charlietfl Вероятно, речь идет о новых функциях регулярных выражений, которые replace вызов должен был бы учитывать. Само по себе существование метода не помогает 🙂

3. @Bergi ах, да, это может быть так. И поскольку @babel/transform-runtime это не приводит к такому полизаполнению, было бы ли сочтено лучшей практикой использовать @babel/preset-env для полизаполнения методов экземпляра — а затем использовать @babel/transform-runtime для его первоначальной цели внедрения вызовов во вспомогательную среду выполнения babel вместо того, чтобы babel записывал эти помощники непосредственно в передаваемые файлы?

4. Как вы думаете, почему это должно быть заполнено полифоном string.replace ? Возможно, вы путаете с replaceAll , который требует полизаполнения для Edge.