J'ai quelques bibliothèques [Foo et Bar] que je développe en concert, mais qui sont toujours des choses techniquement séparées. Auparavant, je viens de redéfinir l'autochargeur pour aimer "Foo\\": "../Foo/src"
, mais maintenant que j'ai ajouté une dépendance Guzzle à Foo, Bar retourne son couvercle car ce n'est pas l'une de ses dépendances.
Structure du répertoire:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Instruction de chargement automatique théorique: [dans Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Exemple de code:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Comment puis-je résoudre ce problème sans configurer un référentiel Composer local? Je veux les maintenir en tant que packages séparés, juste que l'un nécessite l'autre, et pour cela traite les dépendances de l'autre.
modification après réponse:
Grâce à infomaniac, j'ai fait ce qui suit:
Initialisation du repo git:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Ajout de la configuration du compositeur:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Et puis composer update
!
sammitch/foo
est le nom du package et n'a littéralement rien à voir avec où il se trouve. Construira une liste des packages disponibles en fonction de ses dépôts configurés, dans ce cas en récupérant le composer.json à partir du dépôt git local spécifié, puis composer gère le reste. Le sammitch/foo
package est copié dans le vendor
dossier de l' application actuelle de la même manière que tout autre package.