SASS,Rails 3.1:在供应商/资产中加载样式表

时间:2011-09-10 18:30:35

标签: ruby-on-rails-3.1 sass sprockets

我正在使用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,而非sassscss。我无法使用@import ../../../vendor/assets/stylesheets/*,因为它仅适用于sassscss个文件。

有没有办法做到这一点?

更新

我现在拥有的是这个。

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 个答案:

答案 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/')

我刚刚将上述内容添加到应用程序中,以下指令现在都在运行:

  • 导入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

这有帮助吗?对不起,如果我误解了这个问题!

答案 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/')}"

从那时起,当你在项目中包含多个引擎时,你总是可以把它放到干掉它的方法中。