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

ситуация

Поэтому у меня есть .babelrc:

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

Вопрос

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

Ответ 1

TL;DR

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

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

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

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

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

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

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

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

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

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

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

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