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

Ruby on rails 3.1 SASS,Rails 3.1:在供应商/资产中加载样式表,ruby-on-rails-3.1,sass,sprockets,Ruby On Rails 3.1,Sass,Sprockets,我正在使用SASS在Rails 3.1(SASS Rails 3.1)应用程序中加载样式表。例如,app/assets/stylesheets中的sass部分是使用application.sass中的@import加载的- @import "pages/common" @import "pages/**/*" @import "jquery-ui.css" 现在,我还想加载供应商/资产/样式表。请注意,我没有使用require vendor,因为@import pages/*似乎是sas

我正在使用SASS在Rails 3.1(SASS Rails 3.1)应用程序中加载样式表。例如,
app/assets/stylesheets
中的sass部分是使用
application.sass中的
@import
加载的-

 @import "pages/common"
 @import "pages/**/*"
 @import "jquery-ui.css"
现在,我还想加载
供应商/资产/样式表
。请注意,我没有使用
require vendor
,因为
@import pages/*
似乎是sass推荐的方法。这里的文件将是
css
,而不是
sass
scss
。我不能使用
@import../../../vendor/assets/stylesheets/*
,因为它仅适用于
sass
scss
文件

有没有办法做到这一点

更新

我现在拥有的是这个

application.css.scss

//= require_tree .
//= require vendor
//= require_self
这包括上面提到的所有sass部分。中的
要求供应商

vendor/assets/stylesheets/vendor.css
看起来像

//= require_tree .
这种方法的一个警告是,sass混合(用户定义和插件)和公共变量并非在所有部分中都可用。我现在拥有的是一个
\u common\u imports.sass
,这是我导入所有部分的第一件事

common\u imports.sass

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

导入
common\u导入所有部分的
感觉非常重复。

嗯,我认为您使用资产管理器的方式很奇怪

app/assets/、lib/assets/和vendor/assets/*中的所有内容都映射到了/assets/中的相同位置,因此,在web端,它们似乎都在同一个文件夹中

在rails 3.1中,您应该做的不是使用css/sass
@import
,而是链轮
需要

您的应用程序顶部应该有以下内容。sass:

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

这样链轮就可以在生产中将所有内容放在同一个文件中,而不必加载大量文件。

如果我理解正确,我认为这可能会有所帮助

类应用程序
块内,将以下内容添加到
config/application.rb

config.sass.load_paths << File.expand_path('../../lib/assets/stylesheets/')
config.sass.load_paths << File.expand_path('../../vendor/assets/stylesheets/')
config.sass.load\u路径
尝试将供应商样式表的扩展名更改为
.scss


一旦我这样做了,SASS就能够找到所需的导入。

当您使用引擎时,这会变得更加棘手。快速monkey路径是在
SASS\u path
环境变量中包含引擎供应商路径。这就是我在
引擎中的工作原理。rb


ENV['SASS_PATH']=“#{ENV['SASS_PATH']}:#{File.expand_PATH('../../../vendor/assets/stylesheets/')”


从那时起,当您在项目中包含多个引擎时,您可以将其放入一个方法中,以使其干燥。

注意,如果您创建了任何新的供应商/*目录(例如供应商/样式表),则需要重新启动rails。如果您在Rails 3.2或更高版本中看到这一点,这可能是最可能的原因。

您可以使用下面的路径从供应商/资产加载资产文件

将下面的行放到application.css文件中,这将非常有用

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

对Javascript资产也可以做同样的事情。

这里使用链轮的问题是变量不能跨部分共享。例如,在
页面/common
中定义的颜色变量在
页面/home
中不可见。现在,每个部分都必须导入所需的公共位。啊,是的,我不认为应该这样使用,是的。我不知道该怎么做。不再需要
config.sass.load\u路径
位了。有趣的是,这是因为Compass或Rails 3.1.1中的更新吗?我真的不想分别导入
供应商/资产/样式表
中的每个文件。除了使用
@import blah
,还有什么方法可以使用
=require_tree../../../vendor/assets/stylesheets
?我不能让他们两个一起工作。嗨@chadoh,我认为不幸的是,这可能被认为是不可取的,原因更好解释。如果导入顺序确实与您无关,那么最好使用一个简单的shell脚本来生成某种“导入”文件,然后您可以简单地
@包含该文件。回答正确。我建议的唯一清理方法是类似于
config.sass.load_paths+=%w(供应商库)。映射{l | Rails.root.join(l,'assets','stylesheets')}
以绕过相对路径并稍微简化。尽管这不能完全回答关于整个目录包含的原始问题。问题:您在哪里找到使用/***模式@import a directory的文档?它似乎有效,但我在任何地方都找不到引用。@robertwbradford:这是Rails 3.1+中sass的一个猴子补丁,你不能混合使用链轮和sass指令吗?因此,在
application.css.scss
中有一个
require vendor
,还有一个
@import“pages/***”
但没有
require_树。
这并不漂亮,但对于在链轮清单中包含vendor/assets/stylesheet中的所有样式表来说,这绝对是最好、最简单的答案。我认为你不需要尾随/。不过,是的,我同意你的看法。