PostCSS | |
---|---|
![]() | |
Тип | Автоматизация работы с CSS |
Разработчики | Андрей Ситник, Бэн Бриггс, Богдан Чадкин[1] |
Написана на | JavaScript |
Операционная система | Кроссплатформенная |
Первый выпуск | 4 ноября 2013[2] |
Последняя версия | 7.0.4 (Президент Ами) (27 сентября 2018[3]) |
Состояние | активное |
Лицензия | Лицензия MIT[4] |
Сайт | postcss.org |
PostCSS — программа, которая автоматизирует рутинные операции с CSS с помощью расширений, написанных на языке JavaScript[5]. Используется при разработке Википедии[6][7], Facebook[8] и GitHub[9][10]. Один из самых часто загружаемых с npm инструментов для работы с CSS[11]. Разработана Андреем Ситником в компании «Злые марсиане»[12].
В отличие от Sass и LESS, PostCSS не является языком шаблонов, компилируемых в CSS. PostCSS — платформа, на которой можно создать разные инструменты работы CSS[13]. В частности, на PostCSS можно создать и язык шаблонов, такой как Sass и LESS[14].
Ядро PostCSS состоит из:[15]
Все полезные функции предоставляются расширениями — небольшими программами, которые работают с деревом объектов. После того, как ядро преобразует CSS-строку в дерево объектов, расширения по очереди анализируют и изменяют это дерево. Затем ядро PostCSS генерирует новую CSS-строку по дереву, которое было изменено расширениями.
И ядро, и расширения PostCSS написаны на языке JavaScript. Все они распространяются через систему npm.
PostCSS предоставляет API для низкоуровневой работы на языке JavaScript:
// Загружаем ядро и расширения из npm
const postcss = require('postcss')
const autoprefixer = require('autoprefixer')
const precss = require('precss')
// Указываем, какие расширения мы хотим использовать
const processor = postcss([autoprefixer, precss])
// Указываем CSS-код и имя входящего/исходящего файла
processor.process('a {}', { from: './app.css', to: './app.build.css' })
// Используем Promise API на случай асинхронных расширений
.then(result => {
// Выводим CSS-код после обработки
console.log(result.css)
// Выводим предупреждения от расширений
for ( let message of result.warnings() ) {
console.warn(message.toString())
}
})
Существуют официальные инструменты для использования PostCSS с такими системами сборки, как Webpack[16], Gulp[17], Grunt[18]. Отдельно поставляется консольный интерфейс[19]. С помощью сборщика Browserify или Webpack, PostCSS может быть запущен в браузере[20].
Разработчик, использующий PostCSS, может сменить парсер и генератор — тогда PostCSS будет работать с такими исходниками как: LESS[21], SCSS[22], Sass[23]. Но сам PostCSS не может компилировать LESS, SCSS или Sass в CSS, он лишь изменяет оригинальные исходные файлы — например, сортирует CSS-свойства или ищет ошибки в коде.
Также в нём можно использовать синтаксис SugarSS, вдохновлённый компактным синтаксисом Sass и Stylus[24].
Для PostCSS написано более 300 расширений[25]. Расширения PostCSS могут решить большинство задач обработки CSS — от анализа и сортировки свойств до сжатия. При этом качество и популярность расширений сильно разнятся.
Полный список расширений можно найти на postcss.parts. Несколько примеров:
Некоторые инструменты, не являясь расширениями PostCSS, используют PostCSS для своей работы. Например, популярный сборщик Webpack содержит PostCSS для работы с CSS[41].
Хотя отдельные расширения и подвергались критике[42], другие стали стандартом «де-факто». Например, Google рекомендует Автопрефиксер для решения проблемы браузерных префиксов в CSS[43].
В целом, PostCSS был тепло встречен индустрией[44]. Даже разработчики Sass считают PostCSS хорошим дополнением к Sass[45].
Главный обсуждаемый вопрос — стоит ли сделать систему сборки CSS только на расширениях PostCSS. С одной стороны, расширения PreCSS или postcss-cssnext могут заменить многие функции Sass и LESS[46]. Синтаксис SugarSS может заменить компактный синтаксис Sass и Stylus[47]. Но с другой стороны, сам автор PostCSS не советует уходить от Sass и LESS в старых проектах[48].
Впервые идея модульного инструмента для CSS была предложена TJ Holowaychuk 1 сентября 2012 в проекте Rework[61]. 28 февраля 2013 TJ рассказал о ней публично[62].
14 марта 2013 Андрей Ситник в компании «Злые марсиане» сделал расширение Автопрефиксер на базе Rework[63]. Изначально расширение даже называлось «rework-vendors»[64].
При росте Автопрефиксера были обнаружены проблемы в реализации Rework[65]. Поэтому 7 сентября 2013[66] Андрей Ситник начал разработку PostCSS на основе идей Rework[67].
Через 3 месяца вышел первый плагин для PostCSS — grunt-pixrem[68]. 22 декабря 2013[69] в версии 1.0 Автопрефиксер перешёл на PostCSS.
PostCSS активно использует тему алхимии в своей символике[70]. Логотипом проекта является знак философского камня[71]. Мажорные и минорные версии PostCSS получают имена демонов «Гоетии»[72]. Например, имя версии 1.0.0 — «Маркиз Декарабиа».
Определённые проблемы возникли с термином «постпроцессор»[73]. Команда PostCSS использовала этот термин, чтобы показать, что PostCSS не является языком шаблонов (препроцессором), а работает с CSS[74]. Но другие разработчики считают, что термин «постпроцессор» лучше подходит для инструментов, которые работают в браузере[42] (например, -prefix-free). Выпуск расширения PreCSS окончательно усложнил ситуацию. Теперь команда PostCSS использует термин «процессор», вместо «постпроцессор»[75].
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .