Я хотел бы создать задачу rake, которая компилирует некоторые файлы SASS, которые ссылаются на @import в драгоценных камнях, чтобы ускорить мой рабочий процесс разработки.
Небольшая предыстория
Недавно мы добавили новую тему в наше приложение rails, и таблицы стилей sass действительно тормозят конвейер ресурсов в среде разработки (вплоть до того, что часто вызывают тайм-ауты).
Тема в значительной степени зависит от импорта и миксинов, которые было бы очень утомительно пытаться вручную преобразовать в файлы, которые мы могли бы просто *= require
, как предлагают некоторые руководства.
Файлы относительно статичны, поэтому нет особых причин, по которым их нужно компилировать при каждом запросе, НО у меня есть другие активы, над которыми я часто работаю, поэтому я бы предпочел не полагаться на rake assets:precompile
)
Все темы включены в один файл (theme/base.scss
), который @import
содержит все остальные, поэтому я подумал, что простым решением будет взять этот файл из application.css
и создать задачу rake theme:precompile
, которая компилирует его в theme.css, который затем требуется application.css
Таким образом, если нам нужно настроить файл темы, мы можем обновить его и запустить задачу rake, а затем в конвейере ресурсов будет просто простой статический файл css для работы.
Сначала я попытался настроить файл rake, который просто вызывает sass.
desc 'Precompile the theme SASS to save on development time'
task :precompile do |t, args|
dir = 'app/assets/stylesheets/'
source = 'theme/base.scss'
dest = 'theme.css'
source_path = dir + src
dest_path = dir + dst
puts "Precomipling #{source_path} to #{dest} ..."
`sass "#{source_path}" "#{dest_path}"`
end
но это не удалось, потому что тема основана на драгоценном камне bootstrap-sass, что дает
Error: File to import not found or unreadable: bootstrap-sprockets.
Итак, похоже, что моя задача rake должна загрузить всю среду sprockets или иначе выяснить, как сообщить SASS, где находится гем bootstrap-sass.
Это возможно? Или есть лучшее решение?