如何使用rails 3.2资产管道指定lib / assets中js文件的路径

时间:2012-03-08 07:41:10

标签: ruby-on-rails asset-pipeline

我在lib / assets文件夹中有这些文件(sketchyPad是用于在html5画布上绘制的jQuery插件,而farbastic是sketchyPad使用的颜色选择器):

lib/
|-- assets
|   |-- javascripts
|   |   `-- lib.js
|   `-- sketchyPad
|       |-- README.md
|       |-- brushes
|       |   |-- simple.js
|       |   `-- smooth.js
|       |-- example
|       |   |-- index.html
|       |   |-- jquery-ui-1.8.16.custom
|       |   |   |-- css
|       |   |   |   `-- ui-lightness
|       |   |   |       |-- images
|       |   |   |       |   |-- ui-bg_diagonals-thick_18_b81900_40x40.png
|       |   |   |       |   |-- ui-bg_diagonals-thick_20_666666_40x40.png
|       |   |   |       |   |-- ui-bg_flat_10_000000_40x100.png
|       |   |   |       |   |-- ui-bg_glass_100_f6f6f6_1x400.png
|       |   |   |       |   |-- ui-bg_glass_100_fdf5ce_1x400.png
|       |   |   |       |   |-- ui-bg_glass_65_ffffff_1x400.png
|       |   |   |       |   |-- ui-bg_gloss-wave_35_f6a828_500x100.png
|       |   |   |       |   |-- ui-bg_highlight-soft_100_eeeeee_1x100.png
|       |   |   |       |   |-- ui-bg_highlight-soft_75_ffe45c_1x100.png
|       |   |   |       |   |-- ui-icons_222222_256x240.png
|       |   |   |       |   |-- ui-icons_228ef1_256x240.png
|       |   |   |       |   |-- ui-icons_ef8c08_256x240.png
|       |   |   |       |   |-- ui-icons_ffd27a_256x240.png
|       |   |   |       |   `-- ui-icons_ffffff_256x240.png
|       |   |   |       `-- jquery-ui-1.8.16.custom.css
|       |   |   `-- js
|       |   |       `-- jquery-ui-1.8.16.custom.min.js
|       |   |-- jquery.min.js
|       |   `-- mattfarina-farbtastic-4bb6bbf
|       |       |-- CHANGELOG.html
|       |       |-- LICENSE.txt
|       |       |-- README.html
|       |       |-- README.md
|       |       |-- demo1.html
|       |       |-- demo2.html
|       |       |-- farbtastic.css
|       |       |-- farbtastic.js
|       |       |-- farbtastic.min.js
|       |       |-- marker.png
|       |       |-- mask.png
|       |       `-- wheel.png
|       |-- sketchyPad.css
|       `-- sketchyPad.js

所以我想包括sketchyPad.js,sketchyPad.css以及templates文件夹中的所有j以及farbtastic.min js文件。

在app / assets / javascripts / application.js中我把:

//= require sketchyPad (this part works fine and correctly includes sketchyPad.js)

但我也希望包括

lib/assets/sketchyPad/brushes/simple.js
lib/assets/sketchyPad/brushes/smooth.js

和brush文件夹中的任何其他js文件,如果不在app / assets中,而是在lib / assets或vendor / assets中,如何使用require_directory?

更新

我试过了

require_tree sketchyPad

但错误:

require_tree argument must be a relative path

我试过了

require_tree ./sketchyPad

但错误:

require_tree argument must be a directory

我认为require_tree必须是相对于app / assets文件夹的,但是要放置类似

的内容
require_tree ./../lib/assets/sketchyPad/brushes

也会出错:

require_tree参数必须是目录

无论如何,我不想包含整个sketchyPad树,因为它确实包含一些我不想包含的js文件...例如示例和它自己的旧版jQuery版本。

更新:

我最终做的是在lib / assets / javascripts文件夹中创建一个lib.js,其中包含一个清单,以包含相对于lib / assets文件夹而不是app / assets文件夹的sketchyPad js文件。

在app / assets / javascripts / application.js中的

我把:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require lib

并在lib / assets / javascripts / lib.js中我把:

//= require ./../sketchyPad/sketchyPad
//= require_tree ./../sketchyPad/brushes
//= require ./../sketchyPad/example/mattfarina-farbtastic-4bb6bbf/farbtastic.min

这似乎包含正确的文件。有更简单的方法吗?

3 个答案:

答案 0 :(得分:2)

也许:

//= require_tree ./sketchyPad

答案 1 :(得分:2)

无需创建/更改清单,只需将以下行添加到application.rb

即可
config.autoload_paths += %W(#{config.root}/lib)
config.autoload_paths += Dir["#{config.root}/lib/**/"]

答案 2 :(得分:1)

Rails方式(根据this answer对我有用)将在index.js中创建一个lib/assets/sketchyPad文件,只需

//= require_tree .

虽然看起来插件非常广泛,但我想你必须将它进一步分解为子目录。