如何在供应商资产文件夹中使用索引文件?

时间:2014-01-07 08:20:16

标签: ruby-on-rails ruby asset-pipeline

我正在使用Rails 3.1.12,并且无法在应用程序中正确组织供应商资产。

我想要做的是使用每个库的索引自动加载一个语句的所有资产,就像它在the guide中指定的那样。文件夹结构如下:

/vendor
--/assets
----/libraries/
------/jquery.ui/
--------/index.js
--------/javascripts ...
--------/stylesheets ...
--------/images ...

我知道Rails会自动将/vendor/assets/内的所有文件夹添加到资产搜索路径中,当我在控制台中打印Rails.application.config.assets.paths数组时,我甚至可以在列表中看到此路径。

但由于某种原因,以下require语句在我的JS文件和SASS文件中都不起作用:

//= require jquery.ui

使用该语句会出现以下错误:

error = #<Sprockets::FileNotFound: couldn't find file 'jquery.ui'>

这很有效,但

//= require jquery.ui/index

如何使第一个工作?

2 个答案:

答案 0 :(得分:1)

原来,问题出在图书馆名称中。当我从

移动库时
vendor/assets/libraries/jquery.ui

vendor/assets/libraries/jquery-ui

并替换

//= require jquery.ui

//= require jquery-ui

一切正常运行,index.js文件夹中的index.sassjquery-ui文件正在正确加载!

答案 1 :(得分:0)

Sprockets指令要求您指定要求的文件。指令//= require jquery.ui减少Sprockets加载文件,如&#34; jquery.ui.js&#34;或&#34; jquery.ui.js.coffee&#34;。如果你想要&#34; jquery.ui / index.js&#34;你需要准确地指定它,文件扩展名是可选的。请注意,此行为几乎与Ruby的要求相同。

  

require指令的功能类似于Ruby自己的require。   它提供了一种声明路径中文件依赖关系的方法   并确保它仅在源文件之前加载一次。

     

require适用于环境路径中的文件:

//= require "foo.js"
     

扩展程序是可选的。如果您的源文件是&#34; .js&#34;,那么   假设您需要另一个&#34; .js&#34;。

//= require "foo"
     

相对路径也有效。使用前导./表示亲戚   路径:

//= require "./bar"

您可以选择使用其他指令,例如require_tree,这将需要指定目录中的所有文件:require_tree ./jquery.ui。但请注意,您需要使用明确的相对路径(例如require_tree ./jquery.ui vs require_tree jquery.ui。)另外,请注意文件将按字母顺序排列,因此,在使用require_tree之前,请确保您的代码与订单无关。