Разница между плагинами и пресетами в .babelrc

Ситуация

Итак, у меня есть .babelrc вот так:

{
    "presets": [
        "es2015",
        "stage-2",
        "react"
    ],
    "plugins": [
        "transform-decorators-legacy"
    ]
}

Вопрос

В чем разница между пресетами и плагинами? Какой из них я должен использовать для настройки Babel?


person totymedli    schedule 29.08.2017    source источник


Ответы (1)


tl;dr

Пресеты — это просто набор плагинов. Вы можете включать плагины по отдельности в массив plugins или набор плагинов в массив presets. Если плагин является частью коллекции (предустановки), вам не нужно включать его отдельно в plugins.

То же самое касается пакетов npm, когда вы включаете их в package.json.

Пресеты против плагинов

В Babel есть множество официальных и сторонних плагинов. Пресеты — это наборы плагинов или как говорят:

Пресеты — это общие .babelrc конфигурации или просто набор плагинов babel.

Важное различие между ними заключается в том, что плагины загружаются перед пресетами.

Плагины предустановки

Наиболее распространенными пресетами являются официальные и прекращены экспериментальные пресеты.

Большинство официальных пресетов содержат плагины для преобразования функций стандартов EcmaScript, в то время как экспериментальные пресеты (стадия-x) содержат плагины, которые транспилируют будущие экспериментальные функции, стандартизация которых все еще находится в стадии разработки. Эти экспериментальные/предлагаемые пресеты устарели, начиная с Babel 7. У них есть блог запись о причинах. Прочтите раздел ниже, чтобы увидеть, как они работают.

Когда вы нажимаете на пресет, вы можете увидеть, какие плагины (и, возможно, другие пресеты) включены в него. Если вы включаете плагин через предустановку, вам не нужно включать его отдельно. То же самое касается package.json, когда вы включаете пакеты пресетов npm.

Устаревшая система предустановок предложения

Переходя от этапа 0 (просто идея) к этапу 3 (кандидат), у вас были наборы плагинов, которые были ближе к стандартизации. Из-за этого, когда вы включали пресет, каждый пресет с более высоким значением stage-x также включался. Плагины, содержащиеся в этих пресетах, постоянно менялись в каждой версии, поскольку они находятся в стадии разработки, и есть вероятность, что плагины будут удалены, если они будут отклонены. Вот почему вам понадобился transform-decorators-legacy, потому что перенос декоратора был ранее удаленный из Babel, хотя они снова добавили его позже.

person totymedli    schedule 29.08.2017