SASS, Rails 3.1: загрузка таблиц стилей в вендор / активы - PullRequest
18 голосов
/ 10 сентября 2011

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

Ответы [ 6 ]

22 голосов
/ 01 октября 2011

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

Добавьте следующее к 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/')

У меня естьтолько что добавили вышеупомянутое в приложение, и теперь обе директивы работают:

  • Import 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.

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

4 голосов
/ 04 декабря 2013

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

3 голосов
/ 03 июня 2014

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

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

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

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

3 голосов
/ 06 августа 2013

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

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

2 голосов
/ 10 сентября 2011

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

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

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

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

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

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

0 голосов
/ 12 ноября 2013

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

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

С этого момента вы всегда можете поместить это в метод для СУШКИ, когда вы включаете несколькодвигатели в вашем проекте.

...