Zum Zeitpunkt des Schreibens im Jahr 2013 war dies eine Möglichkeit, dies zu tun. Composer hat Unterstützung für bessere Möglichkeiten hinzugefügt: Siehe @igorws Antwort
HABEN SIE EIN REPOSITORY?
Git, Mercurial und SVN werden von Composer unterstützt.
HABEN SIE SCHRIFTLICHEN ZUGRIFF AUF DAS REPOSITORY?
Ja?
HAT DAS REPOSITORY A composer.json
DATEI
Wenn Sie ein Repository haben, können Sie schreiben in: Hinzufügen eines composer.json
Datei hinzu oder reparieren Sie die vorhandene, und verwenden Sie die folgende Lösung NICHT.
Gehen Sie zu @igorws Antwort
VERWENDEN SIE DIES NUR, WENN SIE KEIN REPOSITORY HABEN
ODER WENN DAS REPOSITORY KEIN A HATcomposer.json
UND SIE
Dadurch wird alles überschrieben, was Composer möglicherweise aus dem ursprünglichen Repository lesen kann composer.json
, einschließlich der Abhängigkeiten des Pakets und des automatischen Ladens.
Durch die Verwendung des package
Typs wird die Last der korrekten Definition auf Sie übertragen. Der einfachere Weg ist, eine zu habencomposer.json
Datei im Repository zu haben und sie einfach zu verwenden.
Diese Lösung ist wirklich nur für die seltenen Fälle gedacht, in denen Sie einen abgebrochenen ZIP-Download haben, den Sie nicht ändern können, oder ein Repository, das Sie nur lesen können, das aber nicht mehr gepflegt wird.
"repositories": [
{
"type":"package",
"package": {
"name": "l3pp4rd/doctrine-extensions",
"version":"master",
"source": {
"url": "https://github.com/l3pp4rd/DoctrineExtensions.git",
"type": "git",
"reference":"master"
}
}
}
],
"require": {
"l3pp4rd/doctrine-extensions": "master"
}
composer.json
, verwenden Sie also ein VCS-Repo. Ihr Beispiel unterbricht auch das automatische Laden und ignoriert dasbranch-alias
.autoload
Feld nicht hinzufügen , wird es nicht berücksichtigt. Grundsätzlich müssen Sie alle Informationen auscomposer.json
der Repo-Definition kopieren und einfügen . Das VCS-Repo ruft diese Informationen direkt von VCS ab. Die Vorteile vonbranch-alias
werden im Aliase-Dokument und in einem Blog-Beitrag erklärt, den ich geschrieben habe .Dieses Paket ist tatsächlich über packagist erhältlich . In diesem Fall benötigen Sie keine benutzerdefinierte Repository-Definition. Stellen Sie einfach sicher, dass Sie eine hinzufügen
require
(die immer benötigt wird) mit einer passenden Versionsbeschränkung .Wenn ein Paket auf packagist verfügbar ist, fügen Sie kein VCS-Repo hinzu. Es wird die Dinge nur verlangsamen.
Verwenden Sie für Pakete, die nicht über packagist verfügbar sind, a VCS (oder git) Repository, wie in Ihrer Frage gezeigt. Stellen Sie dabei Folgendes sicher:
require
für das betreffende Paketrequire
entspricht den vom VCS-Repo bereitgestellten Versionen. Sie können verwendencomposer show <packagename>
, um die verfügbaren Versionen zu finden. In diesem Fall~2.3
wäre eine gute Option.require
entspricht dem Namen in der Fernbedienungcomposer.json
. In diesem Fall ist esgedmo/doctrine-extensions
.Hier ist ein Beispiel
composer.json
, das dasselbe Paket über ein VCS-Repo installiert:Die VCS-Repo-Dokumente erklären dies alles recht gut.
Wenn ein Git-Repository (oder ein anderes VCS-Repository)
composer.json
verfügbar ist, verwenden Sie kein "Paket" -Repo. Bei Paket-Repos müssen Sie alle Metadaten in der Definition angeben und alle in der bereitgestellten Dist und Source vorhandenen Metadaten werden vollständig ignoriertcomposer.json
. Sie haben auch zusätzliche Einschränkungen, z. B. dass in den meisten Fällen keine ordnungsgemäßen Aktualisierungen möglich sind.Vermeiden Sie Paket-Repos ( siehe auch die Dokumentation ).
quelle
composer.json
.require
Feld angegeben werden muss.The VCS repo docs explain all of this quite well.
... was?Sie können das Git-Repository wie folgt in composer.json einfügen:
quelle
composer.json
Möglichkeit eine Datei hinzu.Sagen Sie dem Komponisten einfach, dass er die Quelle verwenden soll, falls verfügbar:
Oder:
Dann erhalten Sie Pakete als geklonte Repositorys anstelle von extrahierten Tarballs, sodass Sie einige Änderungen vornehmen und sie zurückschreiben können. Vorausgesetzt, Sie haben Schreib- / Push-Berechtigungen für das Repository und Composer kennt das Repository des Projekts.
Haftungsausschluss: Ich glaube, ich habe eine etwas andere Frage beantwortet, aber das war es, wonach ich gesucht habe, als ich diese Frage gefunden habe. Ich hoffe, dass sie auch für andere nützlich sein wird.
Wenn Composer nicht weiß, wo sich das Repository des Projekts befindet oder das Projekt nicht über die richtige Datei composer.json verfügt, ist die Situation etwas komplizierter, aber andere haben solche Szenarien bereits beantwortet.
quelle
Ich habe folgenden Fehler festgestellt:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Wenn Sie ein anderes Repo forken, um Ihre eigenen Änderungen vorzunehmen, erhalten Sie ein neues Repository.
Z.B:
Die neue URL muss in Ihren Repositorys-Bereich Ihrer composer.json aufgenommen werden.
Denken Sie daran, dass Sie
my-foo/bar
das Paket in dercomposer.json
Datei in Ihrem neuen Repo umbenennen müssen, wenn Sie sich wie in Ihrem Abschnitt "Erfordernis" auf Ihre Gabel beziehen möchten .Wenn Sie gerade gegabelt haben, können Sie dies am einfachsten direkt in Github bearbeiten.
quelle
name
Attribut geschrieben wirdcomposer.json
.In meinem Fall verwende ich Symfony2.3.x und der Parameter für die minimale Stabilität ist standardmäßig "stabil" (was gut ist). Ich wollte ein Repo nicht in packagist importieren, hatte aber das gleiche Problem "Ihre Anforderungen konnten nicht in einen installierbaren Satz von Paketen aufgelöst werden.". Es schien, dass die composer.json in dem Repo, das ich zu importieren versuchte, einen "dev" mit minimaler Stabilität verwendete.
Vergessen Sie also nicht, das zu überprüfen, um dieses Problem zu beheben
minimum-stability
. Ich habe es gelöst, indem ich einedev-master
Version anstelle dermaster
in diesem Beitrag angegebenen benötigt habe .quelle
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Wenn Sie einen
composer.json
von GitHub verwenden möchten, sehen Sie sich dieses Beispiel an (im Abschnitt VCS).Der Paketabschnitt ist für Pakete, die das nicht haben
composer.json
. Sie sind diesem Beispiel jedoch auch nicht gefolgt, sonst hätte es auch funktioniert. Lesen Sie, was über Paket-Repositorys steht:quelle
Ich versuche, mich den hier erwähnten Lösungen anzuschließen, da einige wichtige Punkte aufgeführt werden müssen.
Wie in der Antwort von @ igorw erwähnt, muss die URL zum Repository in diesem Fall in der Datei composer.json angegeben sein. In beiden Fällen muss jedoch die Datei composer.json vorhanden sein (im Gegensatz zur zweiten Methode, mit der @Mike Graf sie auf dem Packagist veröffentlicht) nicht viel anders (außerdem bietet Github derzeit Paketdienste als npm-Pakete an), nur ein Unterschied, anstatt die URL nach der Anmeldung buchstäblich an der packagist-Oberfläche einzugeben.
Darüber hinaus besteht das Manko, dass es sich nicht auf eine externe Bibliothek verlassen kann, die diesen Ansatz verwendet, da rekursive Repository-Definitionen in Composer nicht funktionieren. Darüber hinaus scheint es einen "Fehler" zu geben, da die rekursive Definition bei der Abhängigkeit fehlgeschlagen ist. Die explizite Angabe der Repositorys im Stammverzeichnis scheint nicht ausreichend zu sein, aber auch alle Abhängigkeiten von den Paketen müssten erneut spezifiziert werden.
Mit einer Komponistendatei (beantwortet am 18. Oktober 12 um 15:13 Uhr)
Ohne Komponistendatei (beantwortet am 23. Januar 13 um 17:28 Mike Graf)
quelle