Использование Rails Engine для совместного использования миксинов SASS в проектах

Я пытаюсь создать Rails Engine, который обслуживает активы своего хост-приложения. В частности, я хотел бы иметь возможность делать следующее:

# Host App's Gemfile
gem 'my-rockin-engine'

А также ...

# Host App's application.css
/*
 *= require styles
 */

@import 'my-rockin-engine/mixins'

А также ...

# Host App's style.sass
.host-app-defined-class-name
  +my-rockin-engines-mixin

Где миксин «my-rockin-engines-mixin» определен где-то в активах MyRockinEngine.

Проблема

У меня есть цепочка @imports из хост-приложения через движок. (Я использую @imports по причинам, описанным здесь.) Любой определения стилей, которые я создаю в ресурсах Engine, доступны для хост-приложения. Однако ни один из миксинов SASS, которые я создаю, не доступен нигде, кроме как в том же файле, в котором определен миксин.

По сути, мне интересно, не работает ли моя реализация, потому что либо (1) я использую двигатели запутанным образом; (2) Невозможно совместно использовать миксины между Rails Engines и их хост-приложением; (3) Существует некоторый аспект директив sprockets/rails/compass/sass (@import/require), который я неправильно понимаю.

Любая помощь будет принята с благодарностью! И я всегда могу предложить дополнительные подробности, если они кому-то понадобятся.


person repulsebay    schedule 10.09.2013    source источник


Ответы (1)


Для потомков кажется, что проблема, с которой я столкнулся, была в области (3) - описана в моем вопросе.

Не пытайтесь @import sass-файлы с именами foobar.css.sass. Compass будет обрабатывать такие файлы как css, так как их нужно импортировать через @import 'foobar.css'. @import foobar не удастся, потому что .css является частью имени файла.

Итак, моя проблема решена путем обеспечения того, чтобы все файлы, которые я @import, использовали с расширением .sass и не имели .css в последней части имени файла.

person repulsebay    schedule 10.09.2013
comment
То же самое касается файлов scss. Как только я переименовал свой файл движка в stylesheets/engine/engine_css_file.scss из stylesheets/engine/engine_css_file.css.scss, это позволило мне использовать мои миксины из движка в приложение. - person ryanjones; 21.01.2015