Прежде всего, краткое объяснение о трех менеджерах зависимостей.
Композитор
Composer - это инструмент для управления PHP зависимостями. Он использует Packagist , чтобы получить информацию о зависимостях и правильно установить их для вас.
NPM
NPM является частью экосистемы Node и в основном был создан для управления зависимостями для приложений Node.js. Однако с ростом популярности Node люди начали использовать NPM не только для модулей Node.js. Теперь это квази-стандарт для управления вашими JavaScript зависимостями.
Бауэр
Подобно NPM, Bower управляет JavaScript зависимостями. Однако Bower был создан для того, чтобы отделить пакеты для разработки внешнего интерфейса (такие как Bootstrap, jQuery, ...) от всей экосистемы модулей Node, а также предложить менеджер пакетов для CSS. Он предлагает / предлагает некоторые функции, которые NPM не предоставляет или не предоставляет.
Подводя итог: Composer для пакетов PHP, NPM и Bower для пакетов JavaScript.
Я почти уверен, что нет никаких пакетов, доступных для Composer и NPM, так как они ориентированы на два очень разных языка программирования. Однако Bower можно заменить NPM и наоборот. С моей точки зрения, Bower отчасти устарел, поскольку есть и другие инструменты, которые намного более продвинуты, и большинство проектов просто используют NPM для управления зависимостями.
Давайте продолжим с вашими вопросами.
откуда app.js узнает, что я ссылаюсь на папки в папке node_modules, и как app.css узнает, что я ссылаюсь на Bootstrap, просто используя ~?
Не сам файл знает, что тильда (~
) является синонимом каталога node_modules
. Компилятор [1] знает, что он должен искать пакет в каталоге, где упоминается тильда.
Обратите внимание, что синоним tilde> node_modules - это концепция для разработки CSS, а не для JavaScript.
Почему мне не нужно указывать абсолютные пути?
Ты мог бы. Вы также можете использовать относительные пути. Или тильда. На самом деле, это не имеет никакого значения. Это зависит только от используемого вами компилятора.
является общим эмпирическим правилом, что элементы, связанные с JavaScript, обычно берутся из npm, а зависимости PHP - от композитора?
Не эмпирическое правило, это обязательное условие. Вы не найдете модули PHP через NPM и наоборот.
Мое замешательство происходит из-за того, что я искал пакет под названием Laravel Full Calendar, и его стилизация и код JS, похоже, извлекаются через npm, но его PHP-зависимые части извлекаются из Composer?
Абсолютно разумно. Если у вас есть пакет Laravel, который добавляет поддержку Fullcalendar в ваше приложение, я бы создал пакет PHP, независимый от пакета NPM. Пакет PHP создает HTML, а пакет NPM просто обслуживает CSS и JavaScript.
Я бы не назвал это нормальным поведением, но, как я уже сказал, вполне разумным.
Надеюсь, я ответил на ваши вопросы так, чтобы вы поняли суть вопроса. И я согласен, что вся эта концепция управления зависимостями и различия не так легко понять. Если у вас есть другие вопросы, просто оставьте комментарий.
[1] Compiler> Может быть любой модуль, который преобразует app.scss в app.css. Примером является node-sass.