У меня есть один основной модуль приложения и несколько зависимых модулей. Все модули имеют свои собственные репозитории на github и устанавливаются через composer (используя локальный репозиторий suc).
В процессе разработки мне нужно вносить изменения либо в основной модуль, либо в зависимые. Но зависимые модули находятся в каталоге / vendor, и вносить изменения и делать там git init — плохая идея.
Итак, мне нужна локальная копия каждого модуля в папке / devmodules и добавить эту папку в application.config:
'module_listener_options' => array(
// ...
'module_paths' => array(
'./module',
'./vendor',
'./devmodules'
),
Как сказать, что ZF не использует / vendor для таких модулей? Изменить автозагрузчик / использовать инструмент make или скрипт-скрипт в composer для создания новой копии и очистки / вендора?
Какова лучшая практика для решения проблемы?
Постскриптум Зависимые модули — это мои собственные модули, которые я разрабатываю параллельно с Application. Поэтому я хочу видеть изменения немедленно, а не после коммита / толчка / обновления.
У меня была эта проблема со «SpeckCommerce», где вы разместили этот вопрос как проблему. С SpeckCommerce нам пришлось удалить модуль из composer.json
потому что автозагрузчик композитора отменял версию devmodules.
Способ сделать эту работу состоит в том, чтобы удалить модуль из composer.json
, разработайте в папке devmodules, зафиксируйте ее, а затем повторно представьте загруженную композитором версию.
Это вызывает другие проблемы, однако с иждивенцами. Если вы удалите модуль, который является зависимостью для другого модуля, это вызовет проблемы с разрешением зависимостей при установке / обновлении composer.
Я думаю, что самый простой способ работы — это сказать композитору --prefer-source
когда вы устанавливаете / обновляете, что дает вам хранилище с управлением версиями, в которое вы можете добавить удаленный сервер, переключиться на него и затем нажать на свой собственный хранилище, прежде чем создавать PR, объединять и т. д.
Трудно работать с библиотеками в vendor
справочник, но из моего опыта, который оказался наиболее эффективным способом работы.
Для меня я получаю следующее решение:
1) Добавить что-то подобное в "script"
-секция в composer.json:
"devmodules": [
"mkdir devmodules",
"git clone git://github.com/4orever/ppc-auth/ devmodules/ppc-auth",
"git clone git://github.com/4orever/ppc-backend/ devmodules/ppc-backend",
"git clone git://github.com/4orever/ppc-backend-client/ devmodules/ppc-backend-client",
"git clone git://github.com/4orever/ppc-dev-mode/ devmodules/ppc-dev-mode",
"git clone git://github.com/4orever/ppc-main-assets/ devmodules/ppc-main-assets",
"rm -rf vendor/4orever"]
2) И добавить "autoload-dev"
:
"autoload-dev": {
"psr-4": {
"PpcMainAssets\\": "devmodules/ppc-main-assets/",
"PpcBackend\\": "devmodules/ppc-backend/src",
"PpcAuth\\": "devmodules/ppc-auth/src"},
"classmap":[
"devmodules/ppc-backend/Module.php",
"devmodules/ppc-backend-client/Module.php",
"devmodules/ppc-auth/Module.php"]
}
3) Для производства просто используйте: composer install --no-dev
, Я не проверял это, но я полагаю, что «autoload-dev» должен игнорироваться. Если не запустить composer dumpautoload --no-dev
4) Для разработки: composer install
а также composer devmodules
Я не люблю использовать стандартные ./vendor
папка, созданная композитором, потому что она не подключена к git по умолчанию. я предпочитаю git clone
в папке мне нужно.
Я надеюсь, что это будет полезно.