Как я работаю с CSS: Stylus, Autoprefixer, CSSO и Grunt

Раньше я использовал Ниб для добавления CSS-префиксов в Стилусе. Но этот способ был неидеальным: Ниб добавлял кучу лишних префиксов.

Теперь я использую Автопрефиксер. Он добавляет только нужные префиксы для тех браузеров, которые вы поддерживате, используя данные caniuse.com.

Вот мой грантфайл (Gruntfile.coffee):

module.exports = (grunt) ->
  'use strict'

  require('load-grunt-tasks')(grunt)

  debug = !!grunt.option('debug')

  grunt.initConfig
    banner: '/* Author: Artem Sapegin, http://sapegin.me, <%= grunt.template.today("yyyy") %> */\n'
    stylus:
        options:
          banner: '<%= banner %>'
          define:
            DEBUG: debug
          use: [
            () -> require('autoprefixer-stylus')('last 2 versions', 'ie 8', 'ie 9')
            debug or require('csso-stylus')
          ]
        compile:
          files:
            'build/styles.css': 'styles/index.styl'
    watch:
      options:
        livereload: true
      stylus:
        files: 'styles/**'
        tasks: 'stylus'

  grunt.registerTask 'default', ['stylus']

И зависимости:

npm install --save-dev grunt load-grunt-tasks grunt-contrib-stylus grunt-contrib-watch autoprefixer-stylus csso-stylus

Я использую autoprefixer и csso в виде плагинов для Стилуса. То же самое можно было бы сделать и плагинами autoprefixer и csso для Гранта, но плагины для Гранта работают с файлами на диске, а плагины для Стилуса — с переменными в памяти. Это позволяет избежать двух лишних операций записи на диск и сильно упрощает грантфайл.

CSSO нужен, потому что Автопрефиксер не сжимает код при сохранении. А для того, чтобы код не сжимался во время отладки, используется переменная debug: просто запускаете grunt watch --debug и можно работать.