Sass неопределенная переменная при прекомпиляции

Я обновляю наше приложение Rails (3.2.17) до sass и у меня возникают ошибки "неопределенная переменная" во время предварительной компиляции ресурсов. Я использую @import для включения моих фрагментов в файл master.scss. Эта настройка отлично работает локально, но ошибки при предварительной компиляции. Единственный способ обойти ошибки - это @import фрагментов в фрагменты, которые ссылаются на mixins и переменные, определенные в первом фрагменте.

Например: я @import "шрифты" и "кнопки" в master.scss, а затем мне нужно @import "шрифты" второй раз в "кнопки", потому что он использует переменную, определенную в "шрифты". Это позволяет обойти ошибку предварительной компиляции, но она не идеальна, потому что вместо одного экземпляра "шрифтов", загружаемого в приложение, теперь есть два.

@importing всех фрагментов только один раз в master.scss работает локально, когда я не прекомпилирую. Должно быть решение этого. Какие-нибудь мысли?

2 ответа

Вы видите эту ошибку, потому что вы используете application.css с require директивы.

Из рельсовой документации SASS.

Sprockets предоставляет некоторые директивы, которые размещаются внутри комментариев, называемых require, require_tree и require_self. НЕ ИСПОЛЬЗУЙТЕ ИХ В ВАШИХ SASS / SCSS ФАЙЛАХ. Они очень примитивны и плохо работают с файлами Sass. Вместо этого используйте родную директиву Sass @import, которую sass-rails настроил для интеграции с соглашениями ваших Rails-проектов.

Просто переименуйте свой application.css в application.css.scss (с помощью .sass не работает для меня). Удалить все, кроме require self, Включите ваш глобальный @import заявления там.

Еще одно замечание: вам нужно будет добавить все CSS-файлы как @import вручную к вашему application.css.scss, Я обычно создаю папку app/assets/stylesheets/app и добавить @import app/**/* в качестве окончательной записи в application.css.scss

Надеюсь, это поможет.

Я исправил проблему с помощью следующей справки: SASS - использовать переменные для нескольких файлов.

По сути, вы создаете мастер-файл для хранения всех ваших переменных и тому подобного, а затем импортируете мастер-файл в каждый фрагмент, который ссылается на ваши переменные. Одна загвоздка, с которой я столкнулся, была с использованием mixins. Мне пришлось импортировать файл mixin в master, чтобы эти переменные работали в других фрагментах.

Другие вопросы по тегам