是的,有一百万个问题,询问如何为资产管道注册目录。但我的问题略有不同......
我正在构建一个基本的主题系统,文件结构将如下所示:
app/assets/skins/
some_theme/
style.css.scss
fonts/
font1.woff
font2.woff
images/
whocares.png
another_theme/
...
如您所见,特定于主题的资产捆绑在它们自己的目录中。当我添加新主题时,我不希望它需要对配置进行任何修改。
我是否可以配置资产管道来搜索/预编译app/assets/skins/
下的所有文件?
我想我在application.rb中需要这样的东西......
config.assets.paths << Rails.root.join('app', 'assets', 'skins', '**')
......但这不是它的工作原理。它是如何工作的?
答案 0 :(得分:1)
要包含所有脚本:添加到app/assets/javascripts/application.js
:
//= require_tree ../skins
要包含所有样式:添加到app/assets/stylesheets/application.css
:
*= require_tree ../skins
或sass的等效语法(比使用注释更好):
@import '../skins/**/*'
要将所有其他资源添加到config/initializers/assets.rb
:
Dir.glob( Rails.root.join( 'app', 'assets', 'skins', '**' ) ).each do |path|
Rails.application.config.assets.paths << path
end
要访问例如app/assets/skins/a_theme/skin.png
,您可以使用视图帮助程序,如:
<%= image_tag 'skin.png' %>
在你的sass文件助手中,如:
background-image: image-url('skin.png')
字体资产也一样。
更新:只是为了清除一个点:Dir.glob
如果2个图像在不同的路径中具有相同的名称,则只使用路径列表中的第一个