Подтвердить что ты не робот

SASS, Rails 3.1: Загрузка таблиц стилей в поставщиках/активах

Я использую SASS для загрузки таблиц стилей в приложении Rails 3.1 (sass-rails 3.1). Например, sass partials в app/assets/stylesheets загружаются с использованием @import в application.sass -

 @import "pages/common"
 @import "pages/**/*"
 @import "jquery-ui.css"

Теперь я также хочу загрузить vendor/assets/stylesheets. Обратите внимание, что я не использую require vendor, поскольку @import pages/*, по-видимому, рекомендуется использовать sass. Файлы здесь будут css, а не sass или scss. Я не могу использовать @import ../../../vendor/assets/stylesheets/*, поскольку он работает только для файлов sass и scss.

Есть ли способ сделать это?

Обновление

Теперь у меня есть это.

application.css.scss

//= require_tree .
//= require vendor
//= require_self

Это включает в себя все упомянутые выше частицы sass. require vendor в

vendor/assets/stylesheets/vendor.css выглядит как

//= require_tree .

Предостережение этого подхода заключается в том, что sass mixins (пользовательские и плагины) и общие переменные недоступны во всех частичных. Теперь у меня есть _common_imports.sass, для которого я @import во всех частичных элементах.

common_imports.sass

@import "colors"
@import "compass/css3/gradient"
@import "compass/css3/border-radius"
@import "compass/css3/box-shadow"

Импорт common_imports во все частичные элементы чувствует себя очень повторяющимся.

4b9b3361

Ответ 1

Если я правильно понимаю вас, я думаю, что это может помочь.

Добавьте в config/application.rb в блок class Application < Rails::Application следующее:

config.sass.load_paths << File.expand_path('../../lib/assets/stylesheets/')
config.sass.load_paths << File.expand_path('../../vendor/assets/stylesheets/')

Я только что добавил вышеприведенное приложение, и теперь действуют следующие директивы:

  • Импорт Sass:
    @import 'grid' в app/assets/stylesheets/application.css.scss находит файл vendor/assets/stylesheets/_grid.scss;
  • Импортируйте обычный CSS:
    @import 'background', снова в application.css.scss, найдите vendor/assets/stylesheets/background.css.

Помогает ли это? Извините, если я неправильно понял проблему!

Ответ 2

Обратите внимание, что вам нужно будет перезапустить рельсы, если вы создали новые каталоги поставщиков /* (например, поставщики/таблицы стилей). Если вы видите это в Rails 3.2 или новее, это, вероятно, самый вероятный виновник.

Ответ 3

Попробуйте изменить расширение на .scss для вашей таблицы стилей поставщика.

Как только я это сделал, SASS смог найти требуемый импорт.

Ответ 4

Вы можете использовать следующий путь для загрузки файлов активов из поставщика/активов.

Поместите ниже строку в файл application.css, который будет работать отлично.

 *= require_tree ../../../vendor/assets/stylesheets/.

То же самое можно сделать для активов Javascript.

Ответ 5

Хм, я бы сказал, что вы используете менеджер активов странным образом.

Все в app/assets/, lib/assets/and vendor/assets/* отображается в одном месте в /assets/, поэтому на веб-странице кажется, что все они находятся в одной папке.

Что вы должны делать, так как вы в rails 3.1 не используете css/sass @import, а звездочки require.

У вас должно быть в верхней части вашего приложения. sass:

// require pages/common
// require_tree ./pages
// require jquery-ui
// require_self

чтобы звездочки помещали все в один и тот же файл в производство, и вам не нужно загружать кучу файлов.

Ответ 6

Когда вы используете двигатели, это становится более сложным. Быстрый путь обезьяны должен включать путь поставщика двигателей в переменной SASS_PATH Environment. Это то, что сработало для меня в engine.rb:

ENV['SASS_PATH'] = "#{ENV['SASS_PATH']}:#{File.expand_path('../../vendor/assets/stylesheets/')}"

С этого момента вы всегда можете применить это к способу DRY, когда вы включаете в свой проект несколько движков.