Ответ 1
Вы можете использовать Bower Twitter. Это менеджер пакетов для HTML, CSS и Javascript. Он был создан для решения этой самой проблемы.
В Symfony 2 docs сказано:
Пакет не должен вставлять сторонние библиотеки, написанные на JavaScript, CSS или на любой другой язык.
Тогда как мне это сделать? Я хочу установить Twitter Bootstrap, DataTables и многое другое в качестве зависимостей с помощью Composer. Но единственный способ, которым я могу думать, - создать пучок и внедрить их.
Каков правильный способ сделать это?
Вы можете использовать Bower Twitter. Это менеджер пакетов для HTML, CSS и Javascript. Он был создан для решения этой самой проблемы.
EDIT: На данный момент есть очень хорошие менеджеры пакетов для JS-библиотек, таких как Bower, Jam или Component.
Семантическая версия - Композитор советует использовать семантическую систему управления версиями. Он использует настройку X.Y.Z, в которой X является основной версией, Y - младшая версия, а Z - версия патча. Y и Z всегда должны быть обратно совместимы, в то время как X отражает изменения в коде, которые МОЖЕТ нарушать обратную совместимость.
Вставка должна быть прочитана как копия и вставка кода (и двоичного) как часть вашей библиотеки, а затем требующая его как пакет/пакет стороннего поставщика (поставщика). Это похоже на query.js в папке с ресурсами или копирование и вставка кода продвижения в папку внутри вашего пакета.
Почему бы не вставлять сторонние библиотеки
Пакет не должен вставлять сторонние библиотеки, написанные на JavaScript, CSS или на любой другой язык.
Это утверждение происходит с точки зрения лучшей практики. Встраивание (как в copy/paste) сторонних библиотек любого типа (особенно в PHP libs) обычно не является хорошей идеей. Например, представьте, что BUNDLE A использует LIBRARY FOO v1.4.1, а BUNDLE B также использует LIBRARY FOO, но с другой версией v1.5.2. Если какой-либо из BUNDLES (A или B) внедряет FOO lib, они могут (скорее всего, станут) несовместимыми. Например, классы и функции php нельзя переопределять. Любой из пакетов может, конечно, использовать обходные пути для смягчения этой проблемы, такие как namespacing их версии FOO или правил автозагрузки, но это может вызвать другие проблемы, кроме того, что, безусловно, увеличивает использование памяти, так как есть две версии одной и той же вещи, проанализированной по PHP.
Если пакет PHP не соответствует этой наилучшей практике, возникающие ошибки обычно легко обнаруживаются (с ошибкой: не может функция redeclcare blablabla). Однако с библиотеками Javascript это неверно. Вы можете повторно использовать функции (поскольку они являются объектными свойствами). Итак, если теперь FOO - это JS Lib, а BUNDLE A и B внедряют их в свои библиотеки, когда они включены, могут возникнуть странные проблемы. Например, функция может быть переопределена, которая не имеет критической функциональности для одного из пакетов и разбивает ее.
Он имеет дело с библиотеками/пакетами PHP. Symfony советует требовать библиотеку в качестве зависимости, а не встраивать ее, поскольку она использует Composer в качестве менеджера пакетов, который занимается загрузкой и загрузкой пакетов требований. Насколько я помню, когда 2 пакета/пакеты используют одну и ту же библиотеку, если у них разные требования к версии, используется самая актуальная, если только ее обратная совместимость несовместима. Затем Composer сообщает о конфликте, который необходимо разрешить вручную.
Однако... Невозможно правильно обрабатывать библиотеки JavaScript. Это потому, что Composer является пакетом для библиотек PHP. Вы можете обойти это двумя способами , о которых я могу думать: (есть, вероятно, больше и лучшие способы справиться с этим, я просто думал об этих двух, читал их как предложения)
Вам нужно иметь в виду, что:
Поскольку система композиторов настолько привлекательна, особенно при развертывании пакетов/пакетов/библиотек для других людей, мой подход к использованию сторонних библиотек javascript/css заключался в создании менеджера менеджера зависимостей, характерного для JS/CSS, которые другие пакеты/пакеты могли бы использовать, чтобы заботиться о своих зависимостях JS/CSS, не беспокоясь об этом.
Если вы планируете опубликовать свой проект для общественности, а именно в виде пакета symfony, вы должны тщательно спланировать, как подойти к этому. Если ваш проект является самодостаточным (личное использование или клиент, а не широко распространенное использование), то это имеет гораздо меньшую актуальность, поскольку вы (программист) имеете полный контроль над тем, какие сторонние инструменты вы используете и включаете в свой проект. Это просто лучшие "рекомендации", чтобы избежать будущие проблемы.