PurgecssRails

Reduce the bloat in your Rails CSS files using PurgeCSS. You can easily configure it to work with most rails apps.

Installation

First you would need a purgecss executable. you can easily add by:

yarn add purgecss

Add this line to your application's Gemfile:

gem 'purgecss_rails', require: false

And then execute:

$ bundle

Or install it yourself as:

$ gem install purgecss_rails

Usage

Define a file lib/tasks/purge_css.rake and put:

require "purgecss_rails"

namespace :purge_css do
  desc "Clear previous CSS files, this busts the CSS cache"
  task :clear do
    `rm public/assets/*.css -rf`
    `rm public/assets/*.css.gz -rf`
  end

  desc "Optimize css files with PurgeCSS"
  task :run do
    PurgecssRails.configure(purge_css_path: "node_modules/purgecss/bin/purgecss") do |purge|
      purge.search_css_files("public/assets/**/*.css")

      purge.match_html_files "public/assets/**/*.js",
                             "app/views/**/*.html.erb",
                             "app/helpers/**/*.rb"

      purge.optimize!
    end.enable!.run_now!
  end
end

If you need more precision in purging the css, ex engines:

PurgecssRails.configure(purge_css_path: `purgecss`) do |purge|
  purge.search_css_files("public/assets/my_engine/application.css")

  purge.match_html_files "public/assets/my_engine/application.js",
                         "engines/my_engine/views/**/*.html.erb",
                         "app/helpers/**/*.rb"

  purge.optimize!
end.enable!.run_now!

When you are using an external engine and you don't want to purge their css file, add a ingore

  purge.search_css_files("public/assets/**/*.css", ignore: ['rails_admin'])    

you can also call purge.refresh! and reuse the the purge object

Deployment

Heroku Procfile example

release: rake purge_css:clear assets:precompile purge_css:run

Other

rake purge_css:clear assets:precompile purge_css:run

License

The gem is available as open source under the terms of the MIT License.