11

Итак, у меня есть относительно простое приложение Rails, и я хотел добавить в него стиль материального дизайна через Bootstrap.Rails - Разница между @import и * = требует?

Я добавил следующие драгоценные камни моей Gemfile:

gem 'bootstrap-sass' 
gem 'bootstrap-material-design' 

Теперь они оба работают, на мой вопрос, почему я, кажется, чтобы добавить их в мое приложение по-разному. Для Vanilla Boostrap я просто импортирую его в конкретный (я думаю, что это правильный термин) scss-файл, как обычно.

@import "bootstrap-sprockets"; 
@import "bootstrap"; 

Но для драгоценного камня Материал конструкции я должен «потребовать» в корневой application.css файл вместо

*= require bootstrap-material-design 

Почему разница, и что это то, что требует синтаксис на самом деле делать?

+0

Посмотрите на это: http://stackoverflow.com/questions/6074173/should-i-use-import-or-manifest-files – zenw0lf

ответ

-4

Включайте и требуйте, чтобы методы делали разные вещи.

Метод require делает то, что включает в большинстве других программ языки: запустите другой файл. Он также отслеживает то, что вам нужно в прошлом, и не будет требовать того же файла дважды. Чтобы запустить другой файл без добавления дополнительных функций, вы можете использовать метод загрузки.

Метод включения принимает все методы из другого модуля, а включает их в текущий модуль. Это вещь уровня на уровне языка, в отличие от вещи на уровне файлов, как и требуется. Метод включения является основным способом «расширения» классов с использованием других модулей (обычно , называемых микшированием). Например, если ваш класс определяет метод «каждый», вы можете включить модуль mixin Enumerable и он может выступать в качестве коллекции. Это может сбивать с толку, поскольку глагол include используется очень по-разному на других языках.

Так что, если вы просто хотите использовать модуль, а не расширять его или делать микширование, тогда вы захотите использовать require.

Как ни странно, Руби require аналогично Кассиопеяне include, в то время как Руби include почти ничего, как Кассиопеяне include.

More info

+3

Как это ответ на вопрос «Разница между @import и * = require ? "? – evuez

+0

Вопрос о sprockets CSS file organization, в то время как этот ответ касается рубиновых файлов. – amoebe

6

Я думаю, вы понимаете, цель CSS/SASS @import option. require - sprockets directive. Sprockets обрабатывает директивы во время сеанса компиляции - простая конкатенация требуемых файлов. Единственное различие заключается в том, как они обрабатывают контекст. Вкратце - всегда используйте @import.

Пожалуйста, смотрите подробности описание здесь: https://github.com/rails/sass-rails#important-note

3

У меня была проблема с очень медленной перекомпиляций всякий раз, когда я изменил CSS.Согласно , разница между Звездочки require и Sass @import является существенным один, по крайней мере, с точки зрения производительности:

трубопровода

Актив лечит Sass @imports по-разному, что он лечит Звездочки. В случае импорта каждое сохранение будет проходить и каждый раз скомпилировать весь импорт, независимо от того, какой части вы сохранили. Способ, которым Sprockets обрабатываются в таблицах стилей, заключается в том, что только частично вы сохранили бы перекомпилировать, а затем быть добавлены на страницу локально при обновлении. Звездочки - это способ по умолчанию для загрузки нескольких партикулов в один файл для производства.

Используя require для моих независимых поставщиков, перекомпиляция CSS теперь занимает 1,5 секунды вместо 25 секунд.

Смежные вопросы