要求来自另一个宝石的宝石资产

时间:2014-01-27 19:31:59

标签: ruby-on-rails ruby ruby-on-rails-4 gem sprockets

我正在创建一个gem,它将包含基础轨道宝石以及我的应用程序中使用的一些常见变量。我在vendor/assets/stylesheets/foundation.scss创建了一个样式表。我从我的应用程序中加载了这个

的Gemfile

gem 'foobar-foundation-rails', path: '...'

应用/资产/样式表/ application.css

//= require foundation

这是一个很好的起点,但如何在此文件中包含foundation-rails gem的样式表?我不确定如何引用另一个宝石的资产

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是将require语句的责任放在rails app的javascripts文件中。这很可能不是你想要埋藏在宝石中的功能,因为它隐藏了正在发生的事情。

然后确保在foundation-rails需要之前需要gem的css文件。但是,您应该在gem的gemspec文件中添加依赖项要求,以确保在安装gem时,bundler将安装foundation-rails gem。

此外,您可能必须“命名”您的gems样式表以避免命名空间冲突。

vendor/assets/stylesheets/foobar_foundation_rails/foundation.css

这会将样式表文件中的要求更改为

require 'foobar_foundation_rails/foundation.scss'

最后,gem的命名确定了宝石的需求方式。当您使用破折号时,Rails期望需要的东西,因此您的宝石的目录结构将遵循

lib/foobar/foundation/rails

与下划线命名foobar_foundation_rails相反

lib/foobar_foundation_rails

除非你要为foundation-rails gem构建一个“扩展”,这需要被称为foundation-rails-foobar,你可能需要使用下划线语法来节省一些需要的麻烦。设计宝石是扩展宝石的一个很好的例子。