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, чтобы эти переменные работали в других фрагментах.