Настройка browserslist

Browserslist — это стандартный механизм определения списка браузеров, которые должны поддерживаться проектом. Parcel использует эти данные для автоматической настройки процесса сборки, включая:

  • транспиляцию современного JavaScript;
  • преобразование CSS-свойств;
  • добавление необходимых полифилов;
  • оптимизацию итоговых бандлов;
  • исключение ненужных преобразований для современных браузеров.

Вместо ручного указания настроек Babel, PostCSS и других инструментов достаточно определить целевые браузеры через browserslist, после чего Parcel самостоятельно подберёт необходимые преобразования.


Почему browserslist важен

Современные браузеры поддерживают разные наборы возможностей JavaScript и CSS.

Например, такие возможности, как:

  • Optional Chaining (?.);
  • Nullish Coalescing (??);
  • CSS Grid;
  • CSS Custom Properties;
  • ES Modules;

поддерживаются не во всех версиях браузеров.

Если проект должен работать в старых версиях браузеров, Parcel должен преобразовать код в совместимый формат. Для этого ему необходимо знать, какие браузеры считаются целевыми.

Без browserslist сборщик не может точно определить уровень необходимой совместимости.


Как Parcel использует browserslist

При запуске сборки Parcel анализирует настройки проекта и определяет список поддерживаемых браузеров.

На основе этой информации выполняются следующие действия:

JavaScript-трансформация

Исходный код:

const username = user?.profile?.name ?? "Guest";

Для современных браузеров код может быть оставлен без изменений.

Для старых браузеров Parcel автоматически создаст эквивалентную конструкцию:

var username =
  user != null &&
  user.profile != null &&
  user.profile.name != null
    ? user.profile.name
    : "Guest";

CSS-трансформация

Исходный CSS:

.container {
  display: grid;
}

Если требуется поддержка старых браузеров, Parcel может добавить дополнительные CSS-преобразования.


Полифилы

При использовании новых возможностей JavaScript Parcel может автоматически подключать необходимые полифилы в зависимости от списка поддерживаемых браузеров.


Способы задания browserslist

Parcel поддерживает несколько вариантов настройки.

Через package.json

Наиболее распространённый способ.

{
  "browserslist": [
    "> 0.5%",
    "last 2 versions",
    "not dead"
  ]
}

Здесь:

  • > 0.5% — браузеры с долей рынка более 0.5%;
  • last 2 versions — две последние версии каждого браузера;
  • not dead — исключение неподдерживаемых браузеров.

Через файл .browserslistrc

Можно создать отдельный файл в корне проекта.

> 0.5%
last 2 versions
not dead

Такой подход удобен в крупных проектах.


Через секцию targets

Parcel позволяет создавать несколько целей сборки.

Пример:

{
  "targets": {
    "modern": {
      "engines": {
        "browsers": [
          "last 2 Chrome versions"
        ]
      }
    }
  }
}

В этом случае настройка относится только к конкретной цели.


Популярные запросы browserslist

Browserslist использует собственный язык запросов.

Последние версии браузеров

last 2 versions

Означает две последние версии каждого браузера.


Последние версии Chrome

last 2 Chrome versions

Поддерживаются только актуальные версии Chrome.


Определённый браузер

Chrome >= 120

Поддерживаются версии Chrome начиная со 120-й.


Браузеры с определённой долей рынка

> 1%

Включаются браузеры с глобальной долей более 1%.


Исключение браузеров

> 1%
not IE 11

Internet Explorer 11 исключается из списка.


Поддержка только современных браузеров

last 2 Chrome versions
last 2 Firefox versions
last 2 Safari versions

Подходит для современных веб-приложений.


Исключение устаревших браузеров

defaults
not dead

Один из самых популярных вариантов конфигурации.


Значение defaults

Ключевое слово:

defaults

представляет собой рекомендуемый набор браузеров, поддерживаемый командой Browserslist.

На текущий момент он примерно эквивалентен:

> 0.5%
last 2 versions
Firefox ESR
not dead

Использование defaults позволяет получать актуальный список браузеров без постоянного обновления конфигурации.


Параметр not dead

Выражение:

not dead

исключает браузеры, которые:

  • больше не получают обновления;
  • имеют крайне малую аудиторию;
  • официально считаются устаревшими.

Примеры таких браузеров:

  • старые версии Internet Explorer;
  • устаревшие мобильные браузеры;
  • давно снятые с поддержки версии Safari и Android Browser.

Поддержка Internet Explorer

Несмотря на прекращение поддержки IE, некоторые корпоративные проекты продолжают его использовать.

Конфигурация:

IE 11

или

defaults
IE 11

заставит Parcel выполнять значительно больше преобразований.

Например:

class User {
  constructor(name) {
    this.name = name;
  }
}

будет преобразован в ES5-совместимый код.

Это увеличивает:

  • размер бандла;
  • время сборки;
  • объём итогового JavaScript.

Настройка для современных приложений

Для большинства современных SPA-приложений подходит конфигурация:

{
  "browserslist": [
    "defaults",
    "not IE 11"
  ]
}

или

{
  "browserslist": [
    "last 2 Chrome versions",
    "last 2 Firefox versions",
    "last 2 Safari versions"
  ]
}

Такие настройки позволяют использовать современные возможности платформы без значительных накладных расходов.


Настройка для корпоративных систем

Корпоративные приложения часто обязаны поддерживать старые браузеры.

Пример:

{
  "browserslist": [
    "last 5 versions",
    "IE 11"
  ]
}

Parcel выполнит дополнительные преобразования для обеспечения совместимости.


Разделение на production и development

Browserslist поддерживает разные настройки для различных режимов.

В файле package.json:

{
  "browserslist": {
    "production": [
      ">0.5%",
      "not dead"
    ],
    "development": [
      "last 1 Chrome version",
      "last 1 Firefox version"
    ]
  }
}

Преимущества такого подхода:

  • быстрые сборки во время разработки;
  • широкая совместимость в production;
  • уменьшение времени компиляции.

Проверка итогового списка браузеров

Для проверки можно использовать утилиту Browserslist.

Установка:

npm install browserslist --save-dev

Проверка:

npx browserslist

Результат может выглядеть следующим образом:

chrome 125
chrome 124
firefox 126
safari 17.5
edge 125

Это позволяет убедиться, что конфигурация интерпретируется корректно.


Обновление базы данных браузеров

Browserslist использует данные проекта Can I Use.

Со временем статистика устаревает.

Для обновления рекомендуется выполнять:

npx update-browserslist-db@latest

Команда обновляет информацию о:

  • версиях браузеров;
  • рыночных долях;
  • статусах поддержки.

Актуальная база данных помогает Parcel принимать более точные решения при сборке.


Влияние browserslist на размер бандла

Чем больше браузеров необходимо поддерживать, тем больше преобразований выполняется.

Например:

defaults
IE 11

обычно приводит к:

  • увеличению объёма JavaScript;
  • добавлению полифилов;
  • усложнению сгенерированного кода.

Конфигурация:

last 2 Chrome versions

наоборот позволяет сохранить максимально компактный результат.

Поэтому список поддерживаемых браузеров напрямую влияет на производительность приложения и размер итоговой сборки.


Рекомендации по настройке

Современные веб-приложения

{
  "browserslist": [
    "defaults",
    "not IE 11"
  ]
}

Баланс между совместимостью и производительностью.

Внутренние корпоративные системы

{
  "browserslist": [
    "last 5 versions",
    "IE 11"
  ]
}

Максимальная совместимость.

Приложения только для современных браузеров

{
  "browserslist": [
    "last 2 Chrome versions",
    "last 2 Firefox versions",
    "last 2 Safari versions"
  ]
}

Минимальный размер бандлов и высокая скорость выполнения.

Экспериментальные проекты

{
  "browserslist": [
    "last 1 Chrome version"
  ]
}

Удобно для прототипирования и изучения новых возможностей платформы.


Взаимодействие browserslist с другими инструментами

Browserslist стал отраслевым стандартом и используется не только Parcel.

Те же настройки могут автоматически применяться в:

  • Babel;
  • Autoprefixer;
  • PostCSS;
  • Stylelint;
  • ESLint.

Благодаря этому единая конфигурация browserslist обеспечивает согласованную поддержку браузеров во всём процессе разработки и сборки приложения.