Я пишу монтируемый движок Rails 3.1, который добавляет функции в основное приложение (т. Е. Он не изолирован).JS движка зависит от jQuery , jQueryUI , DataTables и JSTree (среди других библиотек), поэтому манифест движка выглядит примерно так:
// my_engine.js
//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jstree_pre1.0_fix_1/jquery.jstree.js
//= require_tree .
Затем я могу условно загрузить этот файл в макет основного приложения, используя:
<%= javascript_include_tag 'application' %>
<%= javascript_include_tag 'my_engine/my_engine' if user_logged_in? %>
Однако, если манифест основного приложения уже содержит один иззависимости (скорее всего, jQuery и jQuery_UJS), то эти зависимости будут загружены дважды.Я увижу что-то вроде:
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
...
<script src="/assets/application.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
<script src="/assets/jquery-ui.js?body=1" type="text/javascript"></script>
<script src="/assets/jstree_pre1.0_fix_1/jquery.jstree.js?body=1" type="text/javascript"></script>
...
<script src="/assets/cms/application.js?body=1" type="text/javascript"></script>
Звездочка require
директива будет требовать актив только один раз в пределах одного пакета, но здесь я работаю с двумя пакетами.Чтобы было проще для других разработчиков, реализующих мой движок, я бы хотел, чтобы они могли включать одну строку, которая определяет, включены ли общие зависимости или нет.Есть ли хороший способ сделать это с помощью Sprockets?