Ich habe ein paar Bibliotheken [Foo und Bar], die ich gemeinsam entwickle, aber technisch immer noch getrennte Dinge. Früher habe ich den Autoloader so neu definiert, dass er gefällt "Foo\\": "../Foo/src"
, aber jetzt, da ich Foo eine Guzzle-Abhängigkeit hinzugefügt habe, klappt Bar den Deckel um, weil es keine seiner Abhängigkeiten ist.
Verzeichnisaufbau:
/home/user/src/
Foo/
src/
FooClient.php
composer.json
Bar/
src/
BarClient.php
composer.json
Theoretische Autoload-Anweisung: [in Bar / composer.json]
"require": {
"local": "../Foo/composer.json"
}
Beispielcode:
require('vendor/autoload.php');
$f = new \Bar\BarClient(new \Foo\FooClient());
Wie kann ich das beheben, ohne ein lokales Composer-Repo einzurichten? Ich möchte diese als separate Pakete verwalten, nur dass eines das andere benötigt und daher die Abhängigkeiten des anderen verarbeitet.
Nachbearbeitung bearbeiten:
Dank Infomaniac habe ich Folgendes getan:
Initialisiert das Git Repo:
cd ~/src/Foo && git init && echo -e "vendor\ncomposer.lock" > .gitignore && git add ./ && git commit -m "Initial Commit"
Die Composer-Konfiguration wurde hinzugefügt:
"require": {
"sammitch/foo": "dev-master"
},
"repositories": [{
"type": "vcs",
"url": "/home/sammitch/src/Foo"
}],
Und dann composer update
!
quelle
sammitch/foo
ist der Paketname und hat buchstäblich nichts damit zu tun, wo er sich befindet. Erstellt eine Liste der verfügbaren Pakete basierend auf den konfigurierten Repos. In diesem Fall wird die Datei composer.json aus dem angegebenen lokalen Git-Repo abgerufen, und der Rest erledigt den Composer. Dassammitch/foo
Paket wirdvendor
wie jedes andere Paket in den Ordner der aktuellen App kopiert .Antworten:
Sie können Komponisten verwenden Repositories verfügen
https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
Geben Sie anstelle des http-Formats einen Dateipfad auf der Festplatte an.
quelle
Der Weg zur Verbindung zu einem lokalen, in-Entwicklungspaket ist zum ersten Add in Ihr Hauptprojekt ist
composer.json
ein Repository , wie folgt aus :Sie müssen auch entweder eine Version in Ihrem Entwicklungspaket angegeben haben
composer.json
oder die Art und Weise, wie ich es mache, besteht darin, dass das Paket Folgendes verwendet@dev
:Es sollte Folgendes ausgeben:
Der
@dev
Befehl require ist wichtig. Composer verwendet diesen Befehl, um den Quellcode aufzunehmen und ihn mit Ihrem neuen Paket zu verknüpfen.Es ist ein Stabilitätsflag, das der Versionsbeschränkung hinzugefügt wurde (siehe Paketlink ).
Die Mindeststabilitätsflags sind:
quelle
composer require "vendorname/packagename @dev"
wird"require":{ "vendorname/packagename": "@dev" }
in composer.json Ihrer App übersetzt, wenn Sie die Composer-InstallationNachdem ich einige Zeit verbracht hatte, verstand ich endlich die Lösung. Vielleicht ist es für jemanden wie mich nützlich und spart Ihnen etwas Zeit. Deshalb habe ich beschlossen, dass ich es hier teilen muss.
Angenommen, Sie haben die folgende Verzeichnisstruktur (relativ zu Ihrem Projektstammverzeichnis):
In diesem Beispiel sehen Sie möglicherweise, dass der
local
Ordner für verschachtelte Projekte Ihres Unternehmens bestimmt ist, zbar-project
. Sie können jedoch auch ein anderes Layout konfigurieren, wenn Sie dies wünschen.Jedes Projekt muss eine eigene
composer.json
Datei haben, z . B. rootcomposer.json
undlocal/bar-project/composer.json
. Dann wäre ihr Inhalt wie folgt:(root
composer.json
:)(
local/bar-project/composer.json
:)Wenn Sie beispielsweise jedes Projekt wie folgt in einem separaten Geschwisterverzeichnis suchen möchten:
- Dann müssen Sie in
repositories
Abschnitt: auf das entsprechende Verzeichnis verlinken :Vergessen Sie danach nicht
composer update
(oder sogarrm -rf vendor && composer update -v
wie in den Dokumenten vorgeschlagen )! Unter der Haube erstellt der Komponist einenvendor/your-company/bar-project
Symlink, der auflocal/bar-project
(bzw.../bar-project
) abzielt .Angenommen, Sie
public/index.php
sind nur einfront controller
, z.Dann
config/composition-root.php
wären Sie:quelle
composer update
mit ähnlichen ausgeführt habencomposer.json
und daher den vorherigen vom Komponisten erstellten Symlink entfernen müssen