Rails 3.1管道 - 排除Javascript文件

Ada*_*dam 29 ruby ruby-on-rails ruby-on-rails-3 asset-pipeline

我想从管道中排除特定的javascript文件(modernizr),因为我希望它单独加载.

我想在开头加载Modernizr,最后我的其余javascript连接起来.

是否有办法在3.1中的资产管道中执行相反的要求?即.排除?

提前致谢.

亚当.

Ada*_*dam 56

我选择通过更改来保持链轮功能

//= require_tree
Run Code Online (Sandbox Code Playgroud)

//= require_directory .
Run Code Online (Sandbox Code Playgroud)

这可以使sprockets自动加载同一目录中的任何文件,但不会在任何文件夹中进一步自动加载.

这允许我将Modernizr.js移动到assets/javascripts/top文件夹,并在顶部手动加载它:

<%= javascript_include_tag "top/modernizr" %>
Run Code Online (Sandbox Code Playgroud)

并移动

<%= javascript_include_tag "application" %>
Run Code Online (Sandbox Code Playgroud)

在我的application.html.erb文件的底部(在结束体标记之上)

  • 谢谢亚当.另外,当我部署到生产时,我需要在production.rb中添加这个代码`config.assets.precompile + = ['top/*.js','top/*.css']`,否则会失败在我的服务器中. (2认同)

mcd*_*ave 23

我意识到这是一个老问题,但谷歌上周把我送到了这里,所以这不是一个过时的问题.我在其他地方找到的答案是链轮的"stub"指令.所以像

//= require-tree .
//= stub Modernizr
Run Code Online (Sandbox Code Playgroud)

这使Modernizr.js不受捆绑资产的影响.它可以包含在自己的标签中,也就是原始答案.

Sprockets更改日志说2012年1月添加了"存根",因此在第一次回答这个问题时它不会出现,但我认为现在这是一个很好的答案.


ken*_*tin 14

通过转到config/environments/production.rb文件并添加以下行,可以更轻松地完成此操作

config.assets.precompile += %w( modernizr.js )
Run Code Online (Sandbox Code Playgroud)

然后当你预编译你的资产时,现代化者将拥有你自己独立的文件,你可以在脑海中使用它.