0

我们需要许多不同的清单文件,以便仅为我们网站的各种功能区域提供适当的 JS 文件,但是我目前必须在每个文件中复制 JS 文件名和版本号,因此我们的清单看起来像:

libs.js

//= require json2
//= require underscore-1.3.1
//= require jquery
//= require jquery-ui-1.8.17.custom.min
//= require jquery_ujs
//= require farbtastic-1.3u.gizmos
//= require bootstrap-2.0.1
//= require highstock-1.1.4.src
//= require exporting-1.1.4.src
//= require modernizr-2.5.3
//= require application
//= require validation
//= require navigation
//= require styles

libs-embedded.js

//= require json2
//= require jquery
//= require highstock-1.1.4.src
//= require exporting-1.1.4.src

我试图通过使用这些 .js.erb 等效项更改这些清单文件来解决此问题:

libs.js

<%= ManifestHelper.require_json2%>
<%= ManifestHelper.require_underscore%>
<%= ManifestHelper.require_jquery%>
<%= ManifestHelper.require_jquery_ui%>
<%= ManifestHelper.require_jquery_ujs%>
<%= ManifestHelper.require_farbtastic%>
<%= ManifestHelper.require_bootstrap%>
<%= ManifestHelper.require_highstock%>
<%= ManifestHelper.require_exporting%>
<%= ManifestHelper.require_modernizr%>
<%= ManifestHelper.require_application%>
<%= ManifestHelper.require_validation%>
<%= ManifestHelper.require_navigation%>
<%= ManifestHelper.require_styles%>

libs-embedded.js

<%= ManifestHelper.require_json2%>
<%= ManifestHelper.require_jquery%>
<%= ManifestHelper.require_highstock%>
<%= ManifestHelper.require_exporting%>

ManifestHelper 类包括以下方法:

  def self.require_underscore
    '//= require underscore-1.3.1'
  end

这是为了让我可以在一个地方管理 JS 文件和版本号,即使它们在许多清单文件中使用。

但是,当我尝试这样做时,我的 libs.js 文件看起来像:

//= require json2
//= require underscore-1.3.1
//= require jquery
//= require jquery-ui-1.8.17.custom.min
//= require jquery_ujs
//= require farbtastic-1.3u.gizmos
//= require bootstrap-2.0.1
//= require highstock-1.1.4
//= require exporting-1.1.4
//= require modernizr-2.5.3
//= require application
//= require validation
//= require styles
//= require navigation;

这有两个问题。首先出于某种原因引入了分号。第二个是生成的 .js 文件没有填充在 //= 需要指令中定义的连接 js 文件......看起来虽然 .erb 替换发生在 .js.erb 文件中,但它似乎在清单文件通读指令后发生。

我的问题是...任何人都可以提出解决此问题的方法或建议替代解决方案,以停止在我的每个清单中复制 js 文件和版本号...

谢谢,伊恩

4

2 回答 2

0

一种可能的解决方法是将共享的 javascript 文件移动到“共享”子目录中,然后从您的清单文件中,使用该require_directory指令拉入共享文件。

//= require_directory shared

这种方法的一个好处是,您只需将 javascript 文件拖放到“共享”目录中,它就可用于所有具有该require_directory语句的父清单。没有更新清单或帮助文件。

唯一的潜在问题是,如果您对这些文件有加载顺序依赖关系,则您无法控制共享文件的加载顺序。但这可以通过使用子目录中的索引清单来静态列出文件的顺序,然后从父清单指向索引清单来解决这个问题。

于 2012-05-02T12:39:24.837 回答
0

我们设法通过使用封装了 javascript 库的 gem 来解决这个问题,例如,我们一直在使用以下 gem: gem 'jquery-rails' gem 'jquery-ui-rails' gem 'twitter-bootstrap-rails' gem 'select2-rails' gem 'underscore-rails' gem 'underscore-string-rails'

然后,这允许您仅使用库的名称在清单中包含相关的 javascript 库。例如: //= 需要 select2 而不是 //= 需要 select2-xyz

显然,gems 做了很多好事,比如管理资产管道集成,但我们并没有我喜欢的所有地方都有库版本号。

于 2012-12-07T12:23:03.940 回答