我正在使用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
如何使第一个工作?
答案 0 :(得分:1)
原来,问题出在图书馆名称中。当我从
移动库时vendor/assets/libraries/jquery.ui
到
vendor/assets/libraries/jquery-ui
并替换
//= require jquery.ui
与
//= require jquery-ui
一切正常运行,index.js
文件夹中的index.sass
和jquery-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
之前,请确保您的代码与订单无关。