Современная сборка фронтенда в Parcel опирается на идею декларативного описания совместимости, где ключевым источником информации о поддерживаемых браузерах выступает конфигурация browserslist. Именно она определяет, какие трансформации CSS и JavaScript будут применены на этапе сборки, включая автоматическую проставку вендорных префиксов через Autoprefixer.
Parcel использует browserslist как единый источник истины для нескольких подсистем трансформации:
Конфигурация может быть задана в нескольких местах:
package.json в поле "browserslist".browserslistrcBROWSERSLIST_ENV,
BROWSERSLISTParcel при сборке автоматически читает эти источники и формирует итоговый список целевых браузеров.
Пример конфигурации в package.json:
{
"browserslist": [
">0.2%",
"not dead",
"not op_mini all"
]
}
И альтернативный вариант через .browserslistrc:
> 0.2%
not dead
not op_mini all
Autoprefixer анализирует CSS и сопоставляет используемые свойства с таблицей поддержки браузеров Can I Use. Далее он добавляет только те префиксы, которые необходимы для выбранных targets.
Например, свойство:
display: flex;
может быть преобразовано в:
display: -webkit-box;
display: -ms-flexbox;
display: flex;
если в таргетах присутствуют старые версии Safari или IE, требующие префиксированных реализаций Flexbox.
Ключевой принцип работы:
Parcel автоматически подключает PostCSS без необходимости ручной конфигурации в простых сценариях. Если в проекте обнаруживается Autoprefixer (как зависимость), он включается в pipeline обработки CSS.
Типичный процесс выглядит так:
Важно, что Parcel не требует явного postcss.config.js,
но он может использоваться для расширенной настройки.
Самый распространённый вариант — единый список браузеров для всего приложения:
{
"browserslist": [
"last 2 versions",
"> 1%",
"not dead"
]
}
Это влияет одновременно на JavaScript и CSS.
Browserslist поддерживает разделение по окружениям:
[production]
> 0.5%
not dead
[development]
last 1 chrome version
last 1 firefox version
Parcel автоматически учитывает NODE_ENV, выбирая
соответствующий блок.
Можно переопределить таргеты без изменения файлов проекта:
BROWSERSLIST="last 1 version" parcel build src/index.html
Это полезно для тестирования совместимости без изменения основного конфига.
Autoprefixer работает не только с простыми свойствами, но и с более сложными случаями:
Разные спецификации Flexbox исторически имели несовместимые реализации:
display: flex;
justify-content: space-between;
align-items: center;
Для старых браузеров добавляются префиксы и альтернативные значения display.
CSS Grid также частично поддерживался с префиксами в ранних реализациях:
display: grid;
grid-template-columns: repeat(3, 1fr);
Autoprefixer может добавлять fallback-правила для старых версий Edge.
transform: translateX(10px);
transition: all 0.3s ease;
Могут быть преобразованы в:
-webkit-transform: translateX(10px);
-ms-transform: translateX(10px);
в зависимости от targets.
Чем точнее определён список поддерживаемых браузеров, тем меньше итоговый CSS:
Пример современного production-конфига:
last 2 Chrome versions
last 2 Firefox versions
last 2 Safari versions
last 2 Edge versions
Такой подход снижает количество legacy-префиксов практически до нуля.
Browser targets влияют не только на CSS, но и на JS:
const,
letParcel синхронизирует эти процессы, чтобы CSS и JS имели одинаковую целевую аудиторию браузеров.
Если Autoprefixer настроен на старые браузеры, а Babel — на современные, возникают расхождения:
Без явной конфигурации Parcel использует дефолтный набор, который может не соответствовать требованиям проекта и приводить к избыточной или недостаточной совместимости.
Использование IE 11 или аналогичных значений приводит
к:
Parcel кэширует результаты трансформаций, включая Autoprefixer. Изменение browserslist приводит к:
Выбор browser targets в связке с Autoprefixer определяется балансом:
Autoprefixer в этом процессе выступает не как самостоятельный инструмент, а как адаптер между декларативной политикой совместимости и реальным CSS-кодом, генерируемым сборщиком.