Rails Asset pipe включает альтернативные файлы манифеста javascript для мобильных устройств - PullRequest
0 голосов
/ 30 октября 2018

В настоящее время мы используем Rails 4.2.8 с Sprockets 2.12.5.

Мы пытаемся загрузить один файл манифеста javascript для настольных устройств, а другой - для мобильных устройств. Мы нашли способ добавить помощника в / helpers / application_helper, который дает нашему представлению доступ к тому, мобильное устройство или нет, как можно найти в этот вопрос о переполнении стека .

def mobile_device
 agent = request.user_agent
 return "tablet" if agent =~ /(tablet|ipad)|(android(?!.*mobile))/i
 return "mobile" if agent =~ /Mobile/
 return "desktop"
end

Мы видим, что эта функция работает, как мы ожидаем, при тестировании.

Затем в application.html.erb мы хотим сделать это:

<% if mobile_device == "mobile" %>
  <%= javascript_include_tag 'application_mobile' %>
<% else  %>
  <%= javascript_include_tag 'application' %>
<% end %>

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

Однако наше настольное приложение возвращает следующую ошибку:

- Звездочки :: CircularDependencyError в Index # index - app / assets / javascripts / application.js уже требуется

Наша мобильная версия возвращает это:

- Звездочки :: CircularDependencyError в Index # index - app / assets / javascripts / application_mobile.js уже требуется

Мы также попытались добавить заглушку «application» в мобильной версии и заглушку «application_mobile» в настольную версию. Это не решает проблему.

Кто-нибудь знает обходной путь для этого или есть лучшее решение?

...