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
во все частичные элементы чувствует себя очень повторяющимся.
Ответы
Ответ 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, когда вы включаете в свой проект несколько движков.