我正在使用SASS在Rails 3.1(sass-rails 3.1)应用中加载样式表。例如,使用app/assets/stylesheets
中的@import
加载application.sass
中的sass partials -
@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
感觉非常重复。
答案 0 :(得分:22)
如果我理解正确,我认为这可能有所帮助。
将以下内容添加到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 'grid'
中的app/assets/stylesheets/application.css.scss
找到文件vendor/assets/stylesheets/_grid.scss
; @import 'background'
再次在application.css.scss
中找到vendor/assets/stylesheets/background.css
。这有帮助吗?对不起,如果我误解了这个问题!
答案 1 :(得分:4)
请注意,如果您创建了任何新的vendor / *目录(例如vendor / stylesheets),则需要重新启动rails。如果您在Rails 3.2或更高版本中看到这一点,这可能是最可能的罪魁祸首。
答案 2 :(得分:3)
尝试将扩展名更改为供应商样式表的
.scss
。
一旦我这样做,SASS就能找到所需的导入。
答案 3 :(得分:3)
您可以使用下面的路径来从供应商/资产中加载资产文件。
将以下行放入application.css文件中,这将非常有效。
*= require_tree ../../../vendor/assets/stylesheets/.
可以为Javascript资产做同样的事情。
答案 4 :(得分:2)
app / assets / ,lib / assets / 和vendor / assets / *中的所有内容都映射到/ assets / so中的相同位置,在Web端,似乎它们是都在同一个文件夹中。
你应该做什么,因为你在rails 3.1中不是使用css / sass @import
而是使用链轮require
。
你应该在你的应用程序的顶部.sass:
// require pages/common
// require_tree ./pages
// require jquery-ui
// require_self
这样sprockets就可以将所有内容放在生产中的同一个文件中,而不必加载一堆文件。
答案 5 :(得分:0)
当您使用引擎时,这会变得更加棘手。快速的猴子路径是在SASS_PATH
环境变量中包含引擎供应商路径。这对我在engine.rb
:
ENV['SASS_PATH'] = "#{ENV['SASS_PATH']}:#{File.expand_path('../../vendor/assets/stylesheets/')}"
从那时起,当你在项目中包含多个引擎时,你总是可以把它放到干掉它的方法中。