Статьи

Как использовать PostCSS с Gulp

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

В этом уроке я покажу вам, как использовать PostCSS с Gulp , популярным инструментом автоматизации. Поскольку это не вводный урок по Gulp, я не буду раскрывать основы Gulp. Но для быстрого освежения, вы можете проверить эту прекрасную статью .

Сайт PostCSS

Настройка проекта

Перед началом этого урока у вас должна быть папка проекта, в которой вы будете работать. В этой папке должен быть установлен Gulp и две папки с именами «начальная» и «конечная» (или другое имя по вашему выбору). Папка с именем «initial» будет содержать ваш необработанный и необработанный код CSS. В «последней» папке будут находиться обработанные файлы, готовые к использованию.

Прежде чем идти дальше, перейдите в папку вашего проекта с помощью терминала и выполните следующую команду:

npm install gulp-postcss --save-dev 

Флаг --save-dev добавляет плагин, который вы устанавливаете, в файл project.json в качестве зависимости. Это будет полезно в ситуациях, когда вам нужно сотрудничать с другими в проекте. Когда другие члены команды запускают команду npm install для вашего пакета, все плагины будут установлены автоматически.

На этом этапе ваша структура папок должна быть:

  • Initial — папка с вашими необработанными CSS-файлами.
    • style.cssнеобработанная таблица стилей, которую мы будем редактировать позже.
  • final — папка с обработанными CSS-файлами.
  • node_modules — папка со всеми модулями npm.
    • gulp — создается при установке Gulp.
    • gulp-postcssсоздается после запуска вышеуказанной команды.
  • guplfile.js — Ваш файл Gulp.
  • package.json — Ваш файл package.json.

Установка плагина

Давайте установим базовый плагин, чтобы начать. Плагин, который мы собираемся использовать, имеет короткий цвет . Это в основном расширяет существующее свойство цвета, чтобы также установить цвет фона, используя второе значение. Выполните следующую команду, чтобы установить short-color .

 npm install postcss-short-color --save-dev 

Вы также можете установить одновременно gulp-postcss и postcss-short-color используя:

 npm install gulp-postcss postcss-short-color --save-dev 

После установки обоих плагинов вам нужно открыть и отредактировать файл gulpfile.js чтобы вы могли начать работать с плагином. Мы начнем с включения следующих строк для включения обоих плагинов:

 var gulp = require('gulp'); var postcss = require('gulp-postcss'); var shortColor = require('postcss-short-color'); 

Теперь давайте настроим задачу Gulp для обработки нашего необработанного CSS-файла и создания готовой таблицы стилей. Вот код для этого:

 gulp.task('css', function () { return gulp.src('initial/*.css') .pipe(postcss([shortColor])) .pipe(gulp.dest('final')); }); 

Я начинаю с создания задачи под названием css . Это имя должно использоваться всякий раз, когда вы хотите запустить соответствующую функцию. Вы можете указать файлы, которые вы хотите обработать внутри gulp.src() . Использование *.css обработает все CSS-файлы в «начальной» папке.

Далее мы используем функцию pipe() для вызова всех наших плагинов. Для этого мы передаем все плагины в качестве аргумента функции postcss() . В нашем базовом примере у нас фактически есть только один плагин для прохождения. Я покажу вам, как передать несколько плагинов в качестве аргументов в следующем разделе. После gulp.dest() плагина, gulp.dest() используется, чтобы установить место назначения обработанных файлов.

Чтобы проверить, все ли настроено правильно, создайте файл style.css внутри «начальной» папки. style.css будет иметь следующий CSS:

 section { color: white black; } 

Далее вам нужно запустить команду gulp css внутри вашего терминала. На этом этапе, если вы загляните в «конечную» папку, вы должны увидеть файл style.css со следующим CSS:

 section { color: white; background-color: black; } 

Если CSS в вашей таблице стилей соответствует CSS выше, то мы можем предположить, что все работает.

Установка нескольких плагинов

Просто использование одного базового плагина не поможет вам с производительностью. PostCSS имеет много впечатляющих и невероятно полезных плагинов, поэтому в большинстве случаев вы будете использовать более одного. В этом разделе я покажу вам, как работать с несколькими плагинами одновременно.

Вам могут пригодиться три плагина / пакета PostCSS: short , cssnext и autoprefixer .

short позволит вам написать сокращенный CSS для многих свойств. Например:

 .heading { font-size: 1.25em 2; } 

станет:

 .heading { font-size: 1.25em; line-height: 2; } 

cssnext позволяет использовать новейший синтаксис CSS в ваших таблицах стилей. Например, следующий CSS:

 .link { color: color(green alpha(-10%)); } 

преобразуется в:

 .link { background: rgba(0, 255, 0, 0.9); } 

Наконец, autoprefixer добавит префиксы вендора в ваш CSS и преобразует:

 img { filter: grayscale(0.9); } 

чтобы:

 img { -webkit-filter: grayscale(0.9); filter: grayscale(0.9); } 

Теперь давайте посмотрим, как мы можем установить эти плагины, а затем использовать их для преобразования наших таблиц стилей. Запустите следующую команду в каталоге проекта:

 npm install autoprefixer postcss-short postcss-cssnext --save-dev 

Мы должны будем изменить нашу задачу Gulp, чтобы включить все эти плагины. Вместо того, чтобы пилить все эти плагины по одному, мы будем хранить их в массиве для простоты обслуживания и краткости. Вот код для нашего gulpfile.js :

 var gulp = require('gulp'); var postcss = require('gulp-postcss'); var autoprefixer = require('autoprefixer'); var cssnext = require('postcss-cssnext'); var shortcss = require('postcss-short'); gulp.task('css', function() { var plugins = [ shortcss, cssnext, autoprefixer({browsers: ['> 1%'], cascade: false}) ]; return gulp.src('initial/*.css') .pipe(postcss(plugins)) .pipe(gulp.dest('final')); }); 

Вы могли заметить, что я указал некоторые параметры для плагина Autoprefixer. Эти параметры определяют CSS, который выводит Autoprefixer. В этом случае я говорю плагину для поддержки всех браузеров с более чем 1% глобального использования. Я также отключил каскадирование, чтобы все префиксные и нефиксированные свойства были выровнены по левому краю. Подобные опции также доступны для большинства других плагинов.

Чтобы проверить, все ли работает, поместите следующий CSS в вашу таблицу стилей:

 .prefix-filter { display: flex; } .cssshort-section { text: #333 bold justify uppercase 1.25em 1.7 .05em; } .cssnext-link { color: color(blue alpha(-10%)); } .cssnext-link:hover { color: color(orange blackness(80%)); } 

Если вы сейчас запустите gulp css в терминале, вы должны получить следующий обработанный CSS внутри style.css в папке «final».

 .prefix-filter { display: -webkit-box; display: flex; } .cssshort-section { color: #333; font-weight: 700; text-align: justify; text-transform: uppercase; font-size: 1.25em; line-height: 1.7; letter-spacing: .05em; } .cssnext-link { color: #0000ff; color: rgba(0, 0, 255, 0.9); } .cssnext-link:hover { color: rgb(51, 33, 0); } 

Порядок исполнения плагинов

Пример в последнем разделе достаточно ясно продемонстрировал полезность PostCSS. Вся мощь PostCSS заключается в его плагинах. Однако при использовании нескольких плагинов, которые вы в конечном итоге будете использовать в сложных проектах, следует помнить один порядок их выполнения.

Рассмотрим два плагина rgba-fallback и color-function . rgba-fallback преобразует цвет RGBA в шестнадцатеричный формат, а функция color преобразует функцию color() CSS в более совместимый CSS. Допустим, у вас есть следующий CSS:

 body { background: color(orange a(90%)); } 

Если вы должны были запустить плагин rgba-fallback перед плагином color-function, вот так:

 var plugins = [ rgbafallback, colorfunction ]; 

Вы получите следующий CSS:

 body { background: rgba(255, 165, 0, 0.9); } 

Как видите, в обработанном CSS нет отступления от RGBA. Причиной этой аномалии является то, что при запуске резервного модуля он находит color(orange a(90%)) и не знает, что с ним делать. Позже плагин цветовой функции выполняется и создает значение цвета RGBA из исходной цветовой функции.

Если вам нужно изменить порядок плагинов и запустить их в следующей последовательности:

 var plugins = [ colorfunction, rgbafallback ]; 

Окончательный CSS будет:

 body { background: #ffa500; background: rgba(255, 165, 0, 0.9) } 

На этот раз плагин цвета сначала преобразует цвет фона в значение RGBA, а плагин резервирования позже добавляет шестнадцатеричный откат.

Вывод

В этом уроке я рассмотрел основы совместного использования Gulp и PostCSS. С правильной комбинацией плагинов и эффективным использованием Gulp вы можете сэкономить много часов разработки и избежать ненужной головной боли. Если у вас есть какие-либо вопросы или предложения по методам, упомянутым в этом руководстве, дайте мне знать в комментариях!