过去几天我一直在解决这个问题,并确定了以下过程。
使用bower-rails gem。它提供了许多不错的 rake 任务,有助于将 bower 的使用与 rails 应用程序和资产管道集成。我更喜欢使用 bower.json 配置,而不是 bower-rails 提供的基于 ruby 的 DSL。我坚持将资产存储在 vendor/assets/bower_components 中的默认 bower 位置。确保将以下内容添加到您的 application.rb。
config.assets.paths << Rails.root.join("vendor","assets","bower_components")
将包添加到 bower.json 后,运行以下命令:
rake bower:install
安装您的 javascript 包。然后在 application.js 和 application.css 文件中引用 javacript。
正如@andrew-hacking 上面提到的那样,rails 和 bower 不能很好地处理具有 css 和图像的 javascript 包,特别是引用图像的 css。 Bower-rails 通过提供的 rake 任务帮助解决此问题:
rake bower:resolve
它通过使用 rails 辅助方法重写组件 css 文件中的 url 引用来解析组件中的相对资产路径,以资产管道友好的方式引用资产。详情请参阅BowerRails::Performer#resolve_asset_paths。
我的偏好是将所有 bower_components 签入到我们的存储库中,因此我们运行 bower:install,然后运行 bower:resolve。然后,您需要将包中引用的图像添加到您的暂存和生产环境的 config.assets.precompile 列表中。例如,这里是使用 bower 和 rails 将 select2 javascript 组件添加到您的 rails 项目的设置。
bower.json:
{
"name": "Acme",
"private": true,
"dependencies": {
"select2": "3.5.1"
}
}
app/assets/javascripts/application.js.coffee:
#= require select2/select2
app/assets/stylesheets/application.css.sass
//= require select2/select2
config/environments/staging.rb 和 config/environments/production.rb:
config.assets.precompile += ["select2/*.png",
"select2/*.gif"]
它并不完美,但它为您提供了 javascript 组件的依赖关系管理,而且最好先弄清楚您需要拉入哪些 gem 才能为资产管道启用所需的 javascript 组件。