我们需要许多不同的清单文件,以便只为我们网站的各个功能区域提供相应的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
库-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%>
库-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文件没有使用// = requires指令中定义的连接的js文件填充....看起来虽然.erb替换发生在.js.erb文件中,但它出现了在清单文件读完指令后发生。
我的问题是......任何人都可以建议一种方法来解决这个问题,或者建议一个替代解决方案让我停止复制每个清单中的js文件和版本号...
谢谢, 伊恩
答案 0 :(得分:0)
一种可能的解决方法是将共享的javascript文件移动到“共享”子目录中,然后从清单文件中使用require_directory
指令来提取共享文件。
//= require_directory shared
此方法的一个好处是您只需将javascript文件放入“共享”目录,以使其可用于具有require_directory
语句的所有父清单。没有更新清单或帮助文件。
如果您对这些文件具有加载顺序依赖性,那么只有潜在的问题是您无法控制加载共享文件的顺序。但是,可以使用子目录中的index manifest来静态列出文件的顺序,然后从父清单中指向索引清单,以便更加努力地解决这个问题。
答案 1 :(得分:0)
我们通过使用包装javascript库的gem来设法使用这个问题,例如我们一直在使用以下gem: 宝石'jquery-rails' 宝石'jquery-ui-rails' 宝石'twitter-bootstrap-rails' 宝石'select2-rails' 宝石'下划线' gem'undercore-string-rails'
然后,您可以使用库的名称在清单中包含相关的JavaScript库。例如:// = require select2而不是// = require select2-x.y.z
显然,宝石做了许多好事,比如管理资产管道集成,但我们没有在我喜欢的地方拥有库版本号。