Composer utilitza PHP i per tant cal tenir instal·lat PHP al ordinador/servidor.
Per tenir PHP podeu instal·lar un servidor LAMP amb tasksel ($sudo apt-get install tasksel && sudo tasksel lamp ) però simplement amb php5-cli és suficient:
$ sudo apt-get install php5-cli php5-mcrypt mcrypt
NOTA: el paquet Mcrypt és necessari per evitar errors Error Output: PHP Notice: Use of undefined constant MCRYPT_RIJNDAEL_256 - assumed 'MCRYPT_RIJNDAEL_256' però crec només és error amb Composer i Laravel al executar composer require
Si seguiu les passes de l'apartat instal·lació també necessitareu CURL
$ sudo apt-get install curl
$ cd $ sudo apt-get install curl php5-cli $ curl -sS https://getcomposer.org/installer | php #!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /home/sergi/composer.phar Use it: php composer.phar
Això us crea el fitxer:
composer.phar
Un fitxer binari de tipus PHAR (PHP archive)
$ sudo apt-get install curl $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/bin/composer
NOTA: Quan vulgueu utilitzar console globalment utilitzeu $ composer global
És interessant també afegir suport per a bash autocompletion (alternativa: https://github.com/stecman/symfony-console-completion) afegint al final del fitxer ~/.bashrc:
$ joe ~/.bashrc _composer() { local cur=${COMP_WORDS[COMP_CWORD]} local cmd=${COMP_WORDS[0]} if ($cmd > /dev/null 2>&1) then COMPREPLY=( $(compgen -W "$($cmd list --raw | cut -f 1 -d " " | tr "\n" " ")" -- $cur) ) fi } complete -F _composer composer complete -F _composer composer.phar
Una alternativa d'instal·lació sense curl és:
$ sudo apt-get install curl php5-cli $ php -r "readfile('https://getcomposer.org/installer');" | php
L'execució habitual és:
$ php composer.phar install Composer could not find a composer.json file in /home/sergi/composer_test To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section
Com podeu veure es requereix un fitxer de tipus JSON anomenat composer.json per utilitzar composer.
Executeu:
$ composer init
I s'executarà un assistent que us preguntarà la informació necessària per tal de crear una primera versió del fitxer composer.json
Si es tracta d'un projecte que ja disposa de fitxer composer podeu instal·lar les dependències amb:
$ composer install
Si ja estan instal·lades el fitxer composer.lock ho detectarà i no realitzareu cap acció. Recordeu que composer.lock manté una llista de les versions de les dependències instal·lades.
NOTA: Vegeu composer update per actualitzar a noves versions les llibreries/dependències del vostre projecte
Tingueu en compte que si afegiu el fitxer composer.lock a git (normalment és el normal) els altres usuaris del repositori també tindràn bloquejades/forçades (locked) les versions de qui ha creat el repositori i a executat composer install.
S'utilitza require per indicar que el projecte depèn d'una altre altre llibreria i alhora instal·lar està dependència a la carpeta /vendor i actualitzar el autoload.
$ composer require monolog/monolog Using version ~1.13 for monolog/monolog ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing psr/log (1.0.0) Loading from cache - Installing monolog/monolog (1.13.1) Downloading: 100% monolog/monolog suggests installing graylog2/gelf-php (Allow sending log messages to a GrayLog2 server) monolog/monolog suggests installing raven/raven (Allow sending log messages to a Sentry server) monolog/monolog suggests installing doctrine/couchdb (Allow sending log messages to a CouchDB server) monolog/monolog suggests installing ruflin/elastica (Allow sending log messages to an Elastic Search server) monolog/monolog suggests installing videlalvaro/php-amqplib (Allow sending log messages to an AMQP server using php-amqplib) monolog/monolog suggests installing ext-amqp (Allow sending log messages to an AMQP server (1.0+ required)) monolog/monolog suggests installing ext-mongo (Allow sending log messages to a MongoDB server) monolog/monolog suggests installing aws/aws-sdk-php (Allow sending log messages to AWS services like DynamoDB) monolog/monolog suggests installing rollbar/rollbar (Allow sending log messages to Rollbar) Writing lock file Generating autoload files
Observeu la versió que s'ha instal·lat. Al no dir res de la versió específicament s'instal·la la última versió. És més normal indicar la versió o algun tipus de comodi com per exemple:
$ composer require "foo/bar:1.0.0"
Instal·la versió 1.0.0 o :
$ composer require "foo/bar:1.0.*"
Llegiu els comodins possibles a:
https://getcomposer.org/doc/01-basic-usage.md#package-versions
.IMPORTANT: La última versió no vol dir el master del repositori o el que es coneix a composer com dev-master!
Per instal·lar el codi Cutting Edge (la vertsió més recent en desenvolupament):
$ composer require monolog/monolog dev-master
O podeu instal·lar qualsevol versió especifica amb:
$ composer require monolog/monolog ""
També podeu executar un assistent amb:
$ composer require
Recursos:
Executeu:
$ composer update
composer mirarà si hi ha noves versions de les dependències i les instal·larà.
IMPORTANT: Cal que tingueu en compte com heu instal·lat o definit la dependència al fitxer composer.json ja que segons el que haguéssiu posat no s'actualitzarà. Vegeu el següents exemples
Per exemple una entrada com:
"monolog/monolog": "1.0"
En aquest cas esteu especificant una versió especifica (1.0) i només s'instal·la està versió hi hagui o no noves versions.
En canvi:
"illuminate/filesystem": "~5.0",
Vegeu altres exemples i més informació a.
Podeu actualitzar només una dependència amb:
$ composer update foo/bar
També existeix:
$ composer update nothing
Que no instal·la/actualitza cap llibreria/dependència però si actualitza composer (de fet composer.lcok per adaptar-lo als canvis al fitxer composer.json)
Un repositori de Composer és bàsicament un origen de paquets (package source) és a dir un lloc d'on es poden obtenir paquets.
Packagist és el repositori principal de Composer. Consulteu la web:
https://packagist.org/
On podeu consultar els paquets que existeixen i també podeu afegir un nou paquet ("Submit package")
Qualsevol projecte de codi obert es pot allotjar a Packagist
IMPORTANT: No és obligatori que els paquets estiguin a Packagist, es poden definir altres repositoris però facilita les coses ;-)
És extremadament senzill publicar un paquet a Packagist, de fet el més "complicat" és disposar d'un repositori git amb una URL pública, per exemple un repositori github mateix és suficient.
Aneu a la web:
https://packagist.org/packages/submit
I se us demanarà la URL del repositori (ja us indica que suporta git, svn, Hg). Per ser justos realment cal fer alguna cosa més. Al repositori heu de tenir un fitxer:
composer.json
I aquest fitxer ha de tenir el nom del paquet amb l'opció name. A l'hora de posar nom al paquet heu de seguir les convencions indicades a:
https://packagist.org/about
De fet alhora de posar nom al paquet se segueix la mateixa estructura de github és a dir:
{VENDOR_NAME}/{PACKAGE_NAME}
o
{GITHUB_USER}/{PACKAGE_NAME}
Sovint el nom del vendor coincideix amb el del paquet, per exemple el paquet, per exemple:
monolog/monolog
Packagist us comprovarà si el nom del paquet està lliure i si tot és correcte i en cas afirmatiu podreu fer un submit del paquet. Ja teniu el paquet publicat!
Ara normalment voldreu gestionar altres tasques amb el paquet:
1) GitHub Service Hook
Un hook és una acció que s'executa al succeir un esdeveniment concret. Gihub suporta serveis de Hook, en el nostre cas volem actualitzar automaticament el paquet de packagist cada cop fem un push al repositori Github.
Per activar el hook primer heu d'aconseguir el API Token de Packagist a:
https://packagist.org/profile/
Feu click a Show API Token i copieu el token. Ara aneu a la URL del projecte Github, per exemple:
https://github.com/acacha/caca1
I si el projecte és vostre podeu fer click a:
Settings
i a
WebHook and services
Feu click a
Add service
i afegiu un servei:
Packagist
ara ompliu el formulari on:
I guardeu (boto update). Un cop guardat torneu a entrar i feu click a:
Test Service
Ara cal que feu un nou commit/push al repositori per comprovar que s'actualitza el paquet. Però quina versió del paquet? Per defecte existeix una versió a packagist anomenada dev-master que sempre conté la branca master del repositori
2) Packagist versions i etiquetes (tags)
La forma de crear altres versions del paquet es crear tags al repositori i actualitzar (o deixar que actualitzi el Hook ho faci automàticament) packagist. ls tags han de complir les polítiques de noms de versions de Composer ([1]). Noms vàlids són:
1.0.2 0.1 v1.0 v0.1
Per tant utilitzant git tags és molt senzill d'indicar les versions d'un paquet per tal que es puguin instal·lar versions especifiques del paquet mitjançant:
composer require
https://poser.pugx.org/
A:
https://philsturgeon.uk/blog/2012/05/composer-with-codeigniter/
es proposa una idea que utilitza autoload. Basicament el truc es utilitzar composer "as usual" i afegir al principi del fitxer index.php de Code Igniter:
/* * -------------------------------------------------------------------- * COMPOSER AUTOLOAD * -------------------------------------------------------------------- */ include_once './vendor/autoload.php'; ...
Recursos
Fitxer .gitignore d'exemple:
composer.phar vendor/ # Commit your application's lock file http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file # You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
https://getcomposer.org/doc/
MOLT INTERESSANT: https://github.com/franzliedke/studio
Un workflow possible és:
Llista de plantilles:
Bucle infinit de desenvolupament
Aquest procediment és força lent i gens adequat durant el procediment de desenvolupament i proves del paquet.
Una opció alternativa és executar el comentat anteriorment un sol cop i aleshores treballar directament ja sigui de forma temporal o continua al paquet que utilitza el paquet que estem desenvolupant. Com? suposeu que el paquet que esteu desenvolupant és diu el_nostre_vendor/paquet aleshores:
$ cd projecte_utilitza_paquet_estem_desenvolupant $ cd vendor/el_nostre_vendor/paquet
I ara fem que aquesta carpeta estigui lligada al repositori original amb (vegeu [git clone]]):
$ git clone https://PAT_TO_myrepo.com/git.git temp $ mv temp/.git . $ rm -rf temp $ git status
Ara ja podem fer canvis aquí i un cop tot funcioni ok fer commits i push al nostre repositori central. És important (TODO comprovar) executar al fer canvis al codi:
$ composer dump-autoload