Сохранение переменных SCSS в конвейере ресурсов rails?

Я обновляю приложение rails с большим количеством таблиц стилей SCSS для использования конвейера активов и должен включать в себя некоторые глобальные переменные и mixins для каждого файла.

Добавление нескольких директив @import в верхней части каждого файла не очень DRY, поэтому я хотел бы сделать что-то вроде этого:

# application.css
/*
*= require variables
*= require mixins
*= require_tree .
*/

Это не работает, конечно, потому что переменные не сохраняются в файлах. Кто-нибудь знает, как достичь этого?

Ответ 1

Синтаксис манифеста по умолчанию недостаточно мощный, чтобы дать вам полезные функции Sass, такие как общие переменные, mixins и т.д. Вместо этого вы должны:

  • Переименуйте application.css в application.scss(или application.css.scss в Rails 4 или ранее).
  • Вместо использования

    /*
     *= require variables
     *= require mixins
     *= require_tree .
     */
    

    ерунда, теперь вы должны использовать

    @import "variables";
    @import "mixins";
    @import "blah"; // import each SCSS file in your project like this.
    

    Это обеспечит вам полную отдачу от ваших переменных и микшинов в вашем проекте, и вы будете хранить их как СУХИЕ, как позволяет Sass.

Ответ 2

Просто импорт необходимого файла из каждого файла Scss или Sass, похоже, сработал у меня. Например, у меня есть файл colors.scss, который содержит некоторые константы вроде этого:

$black: #222;

Я требую его в манифесте application.css вместе с некоторыми другими файлами:

/*
 *= require colors
 *= require buttons
*/

В моем файле buttons.css.scss я просто делаю это, чтобы избежать ошибки:

@import "colors";

Ответ 3

Кажется невозможным. Завершено добавление каждого файла с @import 'includes/all'; и включение всего остального из includes/all.css.scss.

Ответ 4

Замените require на @import и удалите все = require, даже если вы думаете, что вы это закомментировали.