Пиша монтируем двигател 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
на Sprocket ще изисква актив само веднъж в рамките на един и същи пакет, но тук работя с два пакета. За да улесня други разработчици, внедряващи моя двигател, бих искал те да могат да включат един ред, който открива дали споделените зависимости вече са включени или не. Има ли добър начин да направите това с помощта на Sprockets?