Au moment de la rédaction de cet article en 2013, c'était une façon de le faire. Composer a ajouté un support pour de meilleures façons: voir la réponse de @igorw
AVEZ-VOUS UN REPOSITORY?
Git, Mercurial et SVN sont pris en charge par Composer.
AVEZ-VOUS UN ACCÈS EN ÉCRIT AU REPOSITORY?
Oui?
LE REPOSITORY A-T-IL UN composer.json
FICHIER
Si vous avez un référentiel dans lequel vous pouvez écrire: Ajoutez un composer.json
fichier, ou corrigez l'existant, et N'utilisez PAS la solution ci-dessous.
Aller à @igorw de » réponse
N'UTILISEZ CECI QUE SI VOUS N'AVEZ PAS DE DÉPÔT
OU SI LE DÉPOSITAIRE N'A PAS composer.json
D' UN ET VOUS NE POUVEZ PAS L'AJOUTER
Cela remplacera tout ce que Composer peut lire à partir du référentiel d'origine composer.json
, y compris les dépendances du package et le chargement automatique.
L'utilisation du package
type vous transférera le fardeau de tout définir correctement. Le moyen le plus simple est d'avoir un composer.json
fichier dans le référentiel et de l'utiliser simplement.
Cette solution n'est vraiment que pour les rares cas où vous avez un téléchargement ZIP abandonné que vous ne pouvez pas modifier, ou un référentiel que vous ne pouvez que lire, mais il n'est plus maintenu.
"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
, utilisez donc un repo vcs. Votre exemple interrompt également le chargement automatique et ignore le fichierbranch-alias
.autoload
champ, il ne sera pas inclus. Fondamentalement, vous devez copier-coller toutes les informations decomposer.json
la définition du dépôt. Le référentiel VCS récupère ces informations directement à partir de VCS. Les avantages debranch-alias
sont expliqués dans le document sur les alias et dans un article de blog que j'ai écrit .Ce package est en fait disponible via packagist . Vous n'avez pas besoin d'une définition de référentiel personnalisée dans ce cas. Assurez-vous simplement d'ajouter un
require
(qui est toujours nécessaire) avec une contrainte de version correspondante.En général, si un package est disponible sur packagist, n'ajoutez pas de dépôt VCS. Cela ralentira simplement les choses.
Pour les packages qui ne sont pas disponibles via packagist, utilisez un référentiel VCS (ou git), comme indiqué dans votre question. Lorsque vous le faites, assurez-vous que:
require
pour le package en questionrequire
correspond aux versions fournies par le référentiel VCS. Vous pouvez utilisercomposer show <packagename>
pour trouver les versions disponibles. Dans ce cas, ce~2.3
serait une bonne option.require
correspond au nom dans la télécommandecomposer.json
. Dans ce cas, c'est le casgedmo/doctrine-extensions
.Voici un exemple
composer.json
qui installe le même package via un référentiel VCS:La documentation du référentiel VCS explique tout cela assez bien.
S'il existe un référentiel git (ou autre VCS) avec un référentiel
composer.json
disponible, n'utilisez pas de référentiel "package". Les dépôts de packages nécessitent que vous fournissiez toutes les métadonnées de la définition et ignoreront complètement toutcomposer.json
présent dans la dist et la source fournies. Ils ont également des limitations supplémentaires, telles que ne pas autoriser les mises à jour appropriées dans la plupart des cas.Évitez les dépôts de packages ( voir aussi la documentation ).
la source
composer.json
.require
champ doit être spécifié.The VCS repo docs explain all of this quite well.
... quelle?Vous pouvez inclure le dépôt git dans composer.json comme ceci:
la source
composer.json
fichier si possible.Dites simplement au compositeur d'utiliser la source si disponible:
Ou:
Ensuite, vous obtiendrez des packages sous forme de référentiels clonés au lieu de archives tar extraites, vous pourrez donc apporter des modifications et les valider. Bien sûr, en supposant que vous ayez des autorisations d'écriture / push sur le référentiel et que Composer connaisse le référentiel du projet.
Avertissement: Je pense que je peux répondre à une question un peu différente, mais c'est ce que je cherchais lorsque j'ai trouvé cette question, alors j'espère qu'elle sera également utile à d'autres.
Si Composer ne sait pas où se trouve le référentiel du projet ou si le projet n'a pas le fichier composer.json approprié, la situation est un peu plus compliquée, mais d'autres ont déjà répondu à de tels scénarios.
la source
Je rencontrais l'erreur suivante:
The requested package my-foo/bar could not be found in any version, there may be a typo in the package name.
Si vous forgez un autre dépôt pour apporter vos propres modifications, vous vous retrouverez avec un nouveau dépôt.
Par exemple:
La nouvelle URL devra aller dans votre section référentiels de votre composer.json.
N'oubliez pas que si vous voulez faire référence à votre fork comme
my-foo/bar
dans votre section require, vous devrez renommer le package dans lecomposer.json
fichier à l'intérieur de votre nouveau dépôt.Si vous venez de bifurquer, le moyen le plus simple de le faire est de le modifier directement dans github.
la source
name
attribut à l'intérieurcomposer.json
.Dans mon cas, j'utilise Symfony2.3.x et le paramètre de stabilité minimale est par défaut "stable" (ce qui est bien). Je voulais importer un dépôt pas dans packagist mais j'ai eu le même problème "Vos besoins n'ont pas pu être résolus en un ensemble de packages installables.". Il est apparu que le composer.json dans le dépôt que j'ai essayé d'importer utilise un "dev" à stabilité minimale.
Donc, pour résoudre ce problème, n'oubliez pas de vérifier le fichier
minimum-stability
. Je l'ai résolu en exigeant unedev-master
version au lieu demaster
comme indiqué dans cet article .la source
"dev-master#4536bbc166ada96ff2a3a5a4b6e636b093103f0e"
.Si vous souhaitez utiliser un
composer.json
GitHub, vous devriez regarder cet exemple (sous la section VCS).La section package concerne les packages qui ne possèdent pas l'extension
composer.json
. Cependant, vous n'avez pas suivi cet exemple également ou cela aurait également fonctionné. Lisez ce qu'il dit sur les référentiels de paquets:la source
J'essaie de rejoindre les solutions mentionnées ici car il y a quelques points importants à énumérer.
Comme mentionné dans la réponse de @ igorw, l'URL du référentiel doit être dans ce cas spécifiée dans le fichier composer.json, cependant puisque dans les deux cas le composer.json doit exister (contrairement à la 2ème façon @Mike Graf), le publier sur le Packagist est pas si différent (en outre, Github fournit actuellement des services de packages sous forme de packages npm), seule différence au lieu de saisir littéralement l'URL à l'interface de packagist une fois inscrit.
De plus, il présente un inconvénient: il ne peut pas s'appuyer sur une bibliothèque externe qui utilise cette approche car les définitions de référentiel récursives ne fonctionnent pas dans Composer. De plus, à cause de cela, il semble y avoir un "bogue" là-dessus, puisque la définition récursive a échoué au niveau de la dépendance, la resécification des dépôts explicitement à la racine ne semble pas être suffisante mais toutes les dépendances des packages devraient également être respécifié.
Avec un fichier de compositeur (réponse le 18 octobre 12 à 15:13 igorw)
Sans fichier de compositeur (réponse le 23 janvier 13 à 17:28 Mike Graf)
la source