【问题标题】:Rails strong order of assets requireRails 对资产的强排序要求
【发布时间】:2012-11-22 09:20:22
【问题描述】:

这里是 mobile.js

//= require jquery
//= require iui
//= require faye-updater
//= require anonymous-chat
//= require anonymous-vote
//= require_self

这是我包含脚本的方式

<%= content_for :head do %>
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>
<%= javascript_include_tag "mobile" %>
<% end %>

以及我在重新编译资产后得到的结果:mobile....js 从

开始
function launch_faye_updater....

这是来自 faye-updater.js 的函数,它必须包含在 jquery 和 iui 之后。由于包含顺序错误,它不起作用。如何让 Rails 以正确的顺序包含资产?

UPD:这是在生产模式 Rails 3.2.8

【问题讨论】:

  • 您使用的是什么版本的 Rails?看起来您正在做正确的事情以正确的顺序编译资产。您是否在环境配置中添加了要编译的 mobile.js?设置配置值config.assets.precompile += %w( mobile.js )
  • 是的,我只添加了这个 config.assets.precompile
  • 这似乎不对 - 您只需要预编译顶级资产,即其他主资产未包含的资产。尝试添加 mobile.js。
  • 我知道这是不对的,但是如果 mobile.js 也预编译有什么区别呢?它对包含顺序有何影响?
  • 由于 mobile.js 包含其他 js 文件,预编译将(或应该)组合 jquery、iui、faye-updater、anonymous-chat、anonymous-vote,然后是自身。将该正则表达式添加到预编译列表将编译每个文件,这意味着其中一些 javascript 被编译两次。这可能会导致您在资产中看到的效果。

标签: ruby-on-rails ruby-on-rails-3 assets


【解决方案1】:

从哪里调用launch_faye_updater?

我猜你可以通过移动这条线来解决这个问题:

<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>

在其他包括的下方,像这样:

<%= javascript_include_tag "mobile" %>
<%= javascript_include_tag "#{Settings.faye.address}/client.js" %>

(您可能还想考虑创建一个包含这两个文件的新编译 JS 文件。)

【讨论】:

  • launch_faye_updater 来自 faye-updater 并且必须在 faye-updater 之前包含 #{Settings.faye.address}/client.js
  • 是什么让你说它不起作用?尝试加载页面时是否收到 JavaScript 错误?你能发布那个错误吗? (@s9gf4ult)
  • 错误是:"Uncaught ReferenceError: $ is not defined" 正如预期的那样,因为第一次调用launch_faye_updater时不包含jquery。
  • 该错误来自 client.js 文件还是 mobile.js 文件?
【解决方案2】:

我的 jquery、引导程序和应用程序依赖项也有同样的问题。您可以在 Rails 3.1+ 中按首选顺序交付所有 JS 模块。在您的示例中,您希望在 mobile.js 之前包含 jquery.js。

首先,从您的 mobile.js 文件中删除 jquery

然后你需要在你的application.rb中添加下面这行代码:

config.assets.precompile += ['mobile.js', 'jquery.js', 'jquery_ujs.js']

此时,您已预编译所有内容并可以使用。您的 mobile.js 不包含 jquery,因此您可以按您喜欢的顺序包含它:

<%= javascript_include_tag "jquery" %> 
<%= javascript_include_tag "mobile" %>

就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多