2012-05-02 5 views
0

Нам требуется несколько различных файлов манифеста, чтобы обслуживать только соответствующие 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

ответ

0

Нам удалось использовать эту проблему, используя драгоценные камни, которые завернут JavaScript библиотеки, например, мы использовали следующие камни: камня «Jquery рельсы» камня «JQuery-Ui рельсы» камня " твиттер-Bootstrap рельсы Gem „ВЫБ.2 рельсы“ жемчужины „подчеркивает контррельсы“ жемчужины „подчеркивают, струнных рельсы“

Это то позволяет включить соответствующую библиотеку JavaScript в манифесте, используя только имя библиотеки. Например: // = require select2 вместо // = require select2-xyz

Очевидно, что драгоценные камни делают много хороших вещей, таких как управление интеграцией конвейера активов, но у нас не было номеров версий библиотек по всему месту, которые я понравилось.

0

Возможным обходным путем было бы перемещение общих файлов javascript в подкаталог «shared», а затем из вашего файла манифеста используйте директиву require_directory, чтобы вытащить общие файлы.

//= require_directory shared 

Один бонуса этого метода является то, что у вас есть только уронить файл JavaScript в «общем» каталог для того, чтобы быть доступно для всех родительских манифестов, которые имеют require_directory заявления. Никакие обновления не отображаются или вспомогательные файлы.

Только потенциальная проблема заключается в том, что вы не можете контролировать порядок загрузки разделяемых файлов, если у вас есть зависимости порядка загрузки для этих файлов. Но это можно отнести с меньшим усилием, используя index manifest в подкаталоге, чтобы статически перечислять порядок файлов, а затем указывать на индексный манифест из родительского манифеста.

+0

Привет, Это не будет работать для меня. Проблема в том, что я пытаюсь создать несколько файлов манифеста из одного и того же набора файлов JS. Каждый файл манифеста будет включать в себя другой набор файлов JS, как того требуют различные функциональные области сайта. Например, в одной части сайта нам нужно включить библиотеку HighCharts JS для диаграмм, но в другой части сайта нам это не нужно. – ianpetzer

+0

Я предполагаю, что ваша настройка сложнее, чем я понял из вопроса. В зависимости от специфики вашего сайта вы можете просто захотеть упаковать несколько более мелких файлов манифеста и включить несколько ссылок манифеста на заданную страницу вместо того, чтобы пытаться получить все для данного контекста в один файл. Полезность этого подхода будет зависеть от того, как часто пользователи вашего сайта перемещаются между различными манифестными «контекстами», но я думаю, что лучше иметь 2 или 3 запроса для js-файлов, чем загружать jquery и друзей несколько раз для каждого другого контекста переключатель. – Cade

 Смежные вопросы

  • Нет связанных вопросов^_^