Comment développer et inclure un Compositeur paquet?
Je suis à la recherche pour développer un logiciel en PHP, mais je ne veux pas immédiatement disponible sur GitHub ou quelque part. Il est assez facile de comprendre un Packagist fichier dans mon composer.json
, mais comment puis-je ajouter un paquet dans mon composer.json
? Aussi, dois-je être la construction du paquet dans /vendor/foo/bar
(par rapport à la racine composer.json
), ou dois-je le mettre ailleurs?
Modifier: je suppose que ma question est à propos de la façon dont tout le monde écrit leurs forfaits. Est-ce que chaque nouveau paquet ajouté à Packagist, et puis quand vous voulez tester vos modifications, vous vous engagez à GitHub (ou autre ville), puis tirez-le que retour vers le bas par le Compositeur? Cela semble très inefficace.
Vous devez vous connecter pour publier un commentaire.
Que cette question a de nombreux composants différents/normes à être expliqué, je vais essayer d'expliquer autant que possible ici, et vous pouvez me PM ou simplement Google pour des questions plus spécifiques comme elles arrivent.
Pour répondre à votre première question, "Comment puis-je ajouter un paquet dans mon
composer.json
?":Si par "ajouter un forfait local" vous voulez dire de chargement automatique de votre classe/paquet, vous pouvez le faire soit en utilisant le PSR-4 ou PSR-0 ou Classmap options de compositeur.
Lire plus
Vous pouvez Google si vous avez besoin de plus d'infos sur le PSR-0, PSR-4 et Classmap.
Exemple
Ou (modifier)
Si vous voulez ajouter un paquet:
Créer un
composer.json
pour le forfait local, comme:Vous pouvez également définir d'autres caractéristiques et/ou les dépendances nécessaires.
Zip le paquet, avec le
composer.json
fichier à la racine de fichier dans learchive.zip
, et le placer à l'endroit désiré.Dans l'autre projet/dossier où vous souhaitez inclure le forfait local, ajouter le forfait local nom pour le paramètre requis, comme
Ajoutez la ligne suivante sous la
repositories
paramètre:Maintenant, si vous avez le forfait local git, alors il n'y aurait pas besoin d'archiver l'ensemble (essentiellement omettez l'étape 2) et vous avez juste besoin de remplacer l'URL dans l'exemple ci-dessus à la
path/to/localPackage/.git
.(Fin de l'edit)
Maintenant pour répondre à la grande question: "Comment puis-je développer et inclure un Compositeur paquet?":
Décider de la structure de répertoire. Souvent, il est comme suit:
et de configurer votre
composer.json
.Un exemple de l'un de mes
composer.json
les fichiers peuvent être trouvés à http://pastebin.com/tyHT01Xg.De le télécharger à l' Github et la version. Utilisation Sémantique gestion des versions (assurez-vous d'exclure/ignorer la
vendor
répertoire lors de téléchargement sur Github).Inscrire le package avec Packagist (une fois connecté).
Si vous avez coché votre s'engager en tant qu'
v1.0.0
(ou similaire), cela apparaîtra dans votre Packagist tableau de bord pour ce paquet.Maintenant, si tout est fait correctement, vous devriez être en mesure d'utiliser votre bibliothèque comme une dépendance à d'autres projets en l'ajoutant à la
composer.json
de ce projet.Au lieu de créer un nouvel espace de stockage, vous pouvez dire compositeur à utiliser tout chemin d'accès local:
https://getcomposer.org/doc/05-repositories.md#path
Par exemple, disons que vous avez vos projets PHP sous
~/devel/projects
Vous pouvez avoir votre principal projet dans
~/devel/projects/main_project
, et votre "forfait local" dans~/devel/projects/local_package
Définir votre compositeur de configuration pour le forfait local. Dans
~/devel/projects/local_package/composer.json
.Ensuite, vous pouvez modifier
~/devel/projects/main_project/composer.json
et un lien vers votre forfait local via chemin de repo:Plus d'infos sur ce lien (pas écrit par moi, mais a une bonne explication à ce sujet):
https://carlosbuenosvinos.com/working-at-the-same-time-in-a-project-and-its-dependencies-composer-and-path-type-repository/
Il semble que la plupart des réponses sur ce fil ne sont pas "dans le savoir". Je suis nouveau à Composer moi-même, mais ces réponses sont trompeuses. La question pourrait tout simplement être énoncé comme: "Comment puis-je développer un compositeur package".
Oui, vous pouvez utiliser un référentiel ou de les télécharger à reconstituer le paquet et le mettre à jour après chaque modification. Qu'elle n'est pas la bonne solution ou la réponse à la question.
Cela n'aide pas que Compositeur de la documentation officielle ne fait pas état de cette avance, mais vous pouvez voir la rubrique sur la Documentation des bibliothèques de la page:
C'est très important de comprendre
compositeur.json:
Mentionnées précédemment, la page d'état:
Dans cet exemple, jusqu'à présent, nous avons un package requis, et maintenant un nom. Remarque le
vendor/name
format.Donc maintenant à l'auto-chargement de nos propres fichiers, ce qui est documenté sur le Utilisation de base page.
Cela va de chargement automatique de l'espace de noms de fichiers de classe en vertu de la
src/Acme
répertoire.Sur le plaisir.
Installer/Mettre À Jour
Installer ou mettre à jour le paquet avec la commande:
ou
Cela permettra de télécharger les paquets nécessaires et de créer la autoload.php fichier
Notre structure de projet devrait ressembler similaires aux suivantes:
Y compris
Maintenant pour tester.
Inclure autoload.php
require_once 'path/to/project/vendor/autoload.php';
En supposant Foo.php se présente comme suit:
on peut alors appeler cela de notre script:
Veuillez corriger toute information trompeuse j'ai peut-être dit. C'est ce que semble l'être la solution à une question populaire.
Voici un récapitulatif des solutions en plus de ma propre
Puisque vous ne voulez pas publier encore, vous êtes en développement, c'est une mauvaise option.
Vous ne pouvez pas publier votre bibliothèque de source sur github, pas envie de payer pour un repo, ou être en mesure d'utiliser un cloud service externe (pour des raisons politiques ou des stratégies de réseau).
Vous pouvez utiliser le compositeur le chemin du référentiel dans votre exemple de mise en œuvre à point à un fichier zip comme une libération. Vous devrez re-zip à chaque fois que vous apportez une modification à la lib, même avec un fichier de commandes pour le faire, c'est dégueulasse.
C'est de se rapprocher, mais vous aurez besoin de faire un compositeur de mise à jour chaque fois que vous changez votre bibliothèque et que vous voulez tester votre exemple de mise en œuvre. Cette imite productions, mais c'est encombrant. Personnellement je recommande cette solution, même si elle n'est pas sans cervelle.
C'est un hack, mais vous pouvez simplement ajouter:
}
Veuillez noter que vous devrez copier+coller l'exigent " la section de votre lib de votre exemple de mise en œuvre. Le changement "yourlibnamespace" à votre bibliothèque de noms et de "D:\Code\yourlib\src\" à votre chemin d'accès à votre bibliothèque de source.
De cette façon, tous les changements sont immédiatement répercutées. Toutefois, vous ne pouvez pas utiliser ou tester votre bibliothèque compositeur.fichier json à tous. Si vous modifiez une exigence dans votre bibliothèque .json il ne s'écoule pas à travers à tous. Donc, il a quelques gros inconvénients, mais ne faites ce que vous voulez, ce qui est de tester votre bibliothèque de la mise en œuvre immédiatement avec le moins de commandes possibles.
Habituellement, vous n'avez src\ et tests\, mais beaucoup ont des exemples\ où vous pouvez trouver un exemple de mise en œuvre. Comme vous le développement de votre application, vous pouvez contribuer à ces exemple implémentations. Vous pouvez le faire dans un local git/svn repo, et vous avez l'avantage de l'obtention de la lib de 'besoin', en plus de l'espace de noms automatiquement. C'est le meilleur de tous les mondes. Je recommande cette méthode.
Peut-être l'ajout d'un dépôt personnalisée vous aidera?
https://github.com/composer/composer/blob/master/doc/05-repositories.md
Vous pouvez mettre en place un dépôt git local avec votre bibliothèque très facilement.
Bien sûr, si vous utiliser composer pour gérer les dépendances vous devez construire votre bibliothèque à un autre endroit, et de le télécharger à vendor/via composer coz c'est l'ensemble de point, je suppose.
composer update
chaque fois que vous faites un petit changement à votre package pour le dev du projet à tirer dans la dernière version? Est-il un moyen plus rapide?C'est mon flux de création et de développement d'un nouveau Compositeur paquet localement:
Ce n'est pas encore idéal, mais il obtient le travail fait pour les petites et moyennes paquets.
Pour rendre le développement plus efficace, j'ai simplement symlink le référentiel de développement dans un répertoire qui a déjà installé.
Par exemple, si
/Code/project-1
exige un paquet qui est dans/Code/package-1
, j':package-1
à GitHub (peut-être même privé).project-1
installer à l'aide d'un référentiel personnalisé (voir les autres réponses pour le lien vers le référentiel de configuration)./Code/project-1/vendor/developer/package-1
à/Code/package-1
.De cette façon, quand je fais des changements dans
/Code/package-1
, il est immédiatement pris en compte dans/Code/project-1
.Mon flux de travail ne permet pas de répondre complètement à l'OP de la question, mais peut être utile pour les autres.
Donc ce que je fais est simple: j'ai ajouter le package directement sous le répertoire des vendeurs, que ce soit directement ou à l'aide d'un lien symbolique.
inconvénients