[RESOLU] Composer package: simple ZIP sur le disque dur ?

Eléphanteau du PHP | 20 Messages

08 mai 2015, 12:49

Bonjour à tous,

Je souhaiterais savoir s’il est possible de créer un package pour Composer qui soit constitué d’une « simple archive (ZIP, GZ, TAR...) déposée quelque part sur le système de fichier ».

Je m’explique :

J’ai développé du code que j’ai « packagé ». Pour ce faire, j’ai créé un simple fichier « composer.json » qui ressemble à ceci :

Code : Tout sélectionner

{ "name": "dbeurive/phptools", "description": "This package contains a list of PHP tools", "license": "GNU", "keywords": [], "authors": [ { "name": "My Name", "email": "[email protected]" } ], "require": { "symfony/console": "*" }, "autoload": { "psr-4": { "dbeurive\\phptools\\": "src" } } }
Puis, j'ai lancé la commande « composer install ».

Pour le moment, je n’ai pas envie de déposer de package sur GitHub. Et je n’ai pas non plus envie d’installer Satis... Je souhaiterais être en mesure de spécifier mon package dans un projet simplement en spécifiant un chemin vers un fichier d’archive stocké localement, sur mon disque dur.

J'ai trouvé un « morceau de documentation » qui semble décrire une procédure qui va dans ce sens, mais il faut spécifier une URL vers une archive.

https://getcomposer.org/doc/05-repositories.md#packages

Code : Tout sélectionner

{ "repositories": [ { "type": "package", "package": { "name": "smarty/smarty", "version": "3.1.7", "dist": { "url": "http://www.smarty.net/files/Smarty-3.1.7.zip", "type": "zip" }, "source": { "url": "http://smarty-php.googlecode.com/svn/", "type": "svn", "reference": "tags/Smarty_3_1_7/distribution/" }, "autoload": { "classmap": ["libs/"] } } } ], "require": { "smarty/smarty": "3.1.*" } }
Il serait plus pratique, pour le moment, de spécifier directement un chemin vers un fichier stocké localement sur mon disque.

Je n’ai pas trouvé de description précise et complète de toutes les options de configuration de Composer.

Quelqu’un peut-il me dépanner ?

Merci,

Denis

Eléphanteau du PHP | 20 Messages

08 mai 2015, 22:15

Bonjour à tous,

Après une bonne séance de « prise de tête » sur Google, sur « Stack Overflow »... j’ai trouvé la solution.

La documentation de Composer n’est pas bien présentée.

Il faut chercher du côté de la notion d’« artéfact » (« artifact » en anglais).

Dans le répertoire du code PHP que vous souhaitez « packager », éditer le fichier « composer.json ».

Fichier : <vendor_name>/<package_name>/composer.json
Avec:
  • vendor_name = dbeurive
  • package_name = phptools

Code : Tout sélectionner

{ "version": "1.0", "name": "dbeurive/phptools", "description": "This package contains a list of PHP tools", "license": "Private", "keywords": [], "authors": [ { "name": "Denis BEURIVE", "email": "[email protected]" } ], "require": { "symfony/console": "*" }, "autoload": { "psr-4": { "dbeurive\\phptools\\": "src" } } }
Note : n'oubliez pas l'entrée "version" !

Pour créer le package, il faut produire une archive ZIP de tous les fichiers présents dans le répertoire « package_name ».

Le nom de l'archive ZIP doit être :

Code : Tout sélectionner

<vendor_name>-<package_name>-<version>.zip
Par exemple :

Code : Tout sélectionner

dbeurive-phptools-1.0.0.zip
Voici un extrait du fichier Makefile que j'utilise (à placer dans le répertoire <vendor_name>/<package_name>) :

Code : Tout sélectionner

MAKEFILE_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) VENDOR = dbeurive PACKAGE_NAME = phptools VERSION = 1.0.0 ZIP = /usr/bin/zip ARTIFACTS_DIR = $(MAKEFILE_DIR)artifacts package: cd $(MAKEFILE_DIR) && \ rm -f $(ARTIFACTS_DIR)/$(VENDOR)-$(PACKAGE_NAME)-$(VERSION).zip && \ find . -not -path '*/\.*' -print | egrep -v '^\./Makefile|\./artifacts|\.$$' \ | xargs $(ZIP) -vr $(ARTIFACTS_DIR)/$(VENDOR)-$(PACKAGE_NAME)-$(VERSION).zip
Utilisation :

Code : Tout sélectionner

make package
Notez que je place le fichier ZIP dans le répertoire suivant :

Code : Tout sélectionner

<vendor_name>/<package_name>/artifacts
Exemple :

Code : Tout sélectionner

dbeurive/phptools/artifacts
Pour utiliser le package créé dans un projet, il faut déclarer le chemin vers la liste des archives ZIP qui contiennent les différentes versions du package (ici "/Users/denisbeurive/Desktop/projet/web/dbeurive/phptools/artifacts").

Code : Tout sélectionner

{ "repositories": [ { "type": "artifact", "url": "/Users/denisbeurive/Desktop/projet/web/dbeurive/phptools/artifacts" } ], "require": { "symfony/console": "*", "Slim/Slim": "*", "nesbot/carbon": "*", "dbeurive/phptools": "*" }, "autoload": { "psr-4": { "dbeurive\\application\\": "application/" } } }

Avatar de l’utilisateur
Administrateur PHPfrance
Administrateur PHPfrance | 7256 Messages

10 mai 2015, 10:44

Merci pour le partage de la solution :)
Quand tout le reste a échoué, lisez le mode d'emploi...