Tengo un par de bibliotecas [Foo y Bar] que estoy desarrollando en concierto, pero todavía son cosas técnicamente separadas. Anteriormente, acababa de redefinir el cargador automático para "Foo\\": "../Foo/src"que me gustara , pero ahora que agregué una dependencia de Guzzle a Foo, Bar voltea su tapa porque no es una de sus dependencias.
Estructura de directorios:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Declaración teórica de carga automática: [en Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Código de ejemplo:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
¿Cómo puedo resolver esto sin configurar un repositorio de Composer local? Quiero mantenerlos como paquetes separados, solo que uno requiere el otro y, por lo tanto, procesa las dependencias del otro.
edición posterior a la respuesta:
Gracias a infomaniac he hecho lo siguiente:
Inicializó el repositorio de git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Añadida la configuración del compositor:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
¡Y luego composer update!
fuente

sammitch/fooes el nombre del paquete y literalmente no tiene nada que ver con su ubicación. Construirá una lista de paquetes disponibles basada en sus repositorios configurados, en este caso recuperando el composer.json del repositorio git local especificado, y luego composer maneja el resto. Elsammitch/foopaquete se copia en lavendorcarpeta de la aplicación actual al igual que cualquier otro paquete.Respuestas:
Puede utilizar la función de repositorios de Composer
https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
En lugar de utilizar el formato http, especifique una ruta de archivo en el disco.
fuente
La forma de vincular a un paquete local en desarrollo es agregar primero
composer.jsonun repositorio de su proyecto principal , así:También necesita tener una versión especificada en su paquete de desarrollo
composer.jsono la forma en que lo hago es exigir que el paquete use@dev, así:Debería generar:
El
@devcomando en require es importante, el compositor lo usa para recoger el código fuente y vincularlo simbólicamente a su nuevo paquete.Es una marca de estabilidad agregada a la restricción de versión (ver enlace del paquete ).
Las banderas de estabilidad mínima son:
fuente
composer require "vendorname/packagename @dev"se traduce en"require":{ "vendorname/packagename": "@dev" }en el composer.json de su aplicación si desea ejecutar la instalación del compositorDespués de pasar un tiempo, finalmente entendí la solución. Tal vez sea útil para alguien como yo y te ahorre algo de tiempo, así que he decidido que tengo que compartirlo aquí.
Suponiendo que tiene la siguiente estructura de directorios (en relación con el directorio raíz de su proyecto):
En este ejemplo, puede ver que la
localcarpeta está destinada a proyectos anidados de su empresa, por ejemplobar-project. Pero puede configurar cualquier otro diseño, si lo desea.Cada proyecto debe tener su propio
composer.jsonarchivo, por ejemplo, rootcomposer.jsonylocal/bar-project/composer.json. Entonces su contenido sería el siguiente:(raíz
composer.json:)(
local/bar-project/composer.json:)Si, por ejemplo, desea ubicar cada proyecto en un directorio hermano separado, de la siguiente manera:
- entonces necesitas enlazar al directorio respectivo en la
repositoriessección:Después de eso, ¡no te olvides de hacerlo
composer update(o inclusorm -rf vendor && composer update -vcomo sugieren los documentos )! Bajo el capó, el compositor creará unvendor/your-company/bar-projectenlace simbólico dirigido alocal/bar-project(o../bar-projectrespectivamente).Suponiendo que tu
public/index.phpes solo unfront controller, por ejemplo:Entonces tu
config/composition-root.phpserías:fuente
composer updatecon similarcomposer.jsony, por lo tanto, necesita eliminar el enlace simbólico anterior creado por el compositor