Я работал над разработкой PHP Framework, и мы хотели бы разделить компоненты на отдельные пакеты из ядра. Как это:
vendor /
username/frameworkname /
core/
Namespace /
Core /
..Framework core files here
components/
Namespace /
Component
ComponentOne
ClassOne.php
ClassTwo.php
composer.json
LICENSE.txt
README.md
ComponentTwo
ClassOne.php
ClassTwo.php
ClassThree.php
composer.json
README.md
LICENSE.txt
ComponentHopeYouFotIT!
Core требуется композитором, как это:
composer require name/framework-core
И сможете установить его в
vendor/username/frameworkname/src/core/Namespace/Core/
И любой компонент, как это:
composer require name/componentname
И сможете установить его в:
vendor/username/frameworkname/src/components/Namespace/Component/
Чтобы нам не нужно было создавать отдельную папку для любого нового компонента, и мы могли бы использовать это так:
use Namespace\Core\CoreClass;
use Namespace\Component\{
ComponentOne\ClassTwo,
ComponentTwo\ClassOne
};
Это что возможно?
Я лично пробовал Композитор композитор / монтажников но не смог определить правильные настройки в composer.json, чтобы добиться цели.
"config": {
"vendor-dir": "vendor/username"},
"repositories": [
{
"type": "package",
"package": {
"name": "frameworkname/componentname",
"version": "master",
"source": {
"url": "https://github.com/username/componentname",
"type": "git",
"reference": "master"}
},
"require": {
"composer/installers": "~1.0"}
}
],
Вы смотрели на Документация для пользовательского установщика Composer? Это делает это.
Tl; dr заключается в том, что вам нужно создать (очень простой) плагин Composer для установки пользовательских мест установки, и документация очень подробно расскажет вам об этом.
В сторону: Мой смысл, немного поэкспериментировав с composer/installers
является то, что он может не поддерживать пользовательские типы, но может позволить вам задать пользовательские пути для поддерживаемых типов. То есть: если вы хотите использовать плагин WordPress, но установить его в другом месте, чем обычно, вы можете переопределить install-paths
, но вы не могли обязательно использовать composer/installers
определить свой собственный тип whooptido-type
с пользовательским местом установки. Этот вывод основывается, как я подчеркиваю, на эмпирическом опыте, экспериментирующем с этим утром, а не на фактической документации. 😉
Других решений пока нет …