Нам требуется несколько различных файлов манифеста, чтобы обслуживать только соответствующие JS-файлы для различных функциональных областей нашего сайта, однако мне в настоящее время приходится реплицировать JS-файл название и номер версии в каждом файле, чтобы наши манифесты выглядят как:Избегайте повторения номеров версий javascript в файле манифеста Rails
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 и версией nu mbers в одном месте, хотя они используются во многих файлах манифеста.
Однако, когда я пытаюсь сделать это, мои 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, определенными в директивах // = require .... Похоже, что хотя замена .erb происходит в файле .js.erb, появляется что происходит после того, как файл манифеста прочитал директивы.
Мой вопрос ... Может ли кто-нибудь предложить способ исправить эту проблему или предложить альтернативное решение для меня, чтобы остановить репликацию файлов JS и номера версий в каждом из моих манифестов ...
Спасибо, Ian
Привет, Это не будет работать для меня. Проблема в том, что я пытаюсь создать несколько файлов манифеста из одного и того же набора файлов JS. Каждый файл манифеста будет включать в себя другой набор файлов JS, как того требуют различные функциональные области сайта. Например, в одной части сайта нам нужно включить библиотеку HighCharts JS для диаграмм, но в другой части сайта нам это не нужно. – ianpetzer
Я предполагаю, что ваша настройка сложнее, чем я понял из вопроса. В зависимости от специфики вашего сайта вы можете просто захотеть упаковать несколько более мелких файлов манифеста и включить несколько ссылок манифеста на заданную страницу вместо того, чтобы пытаться получить все для данного контекста в один файл. Полезность этого подхода будет зависеть от того, как часто пользователи вашего сайта перемещаются между различными манифестными «контекстами», но я думаю, что лучше иметь 2 или 3 запроса для js-файлов, чем загружать jquery и друзей несколько раз для каждого другого контекста переключатель. – Cade