Composer
Composer is een PHP dependency manager, zoiets als "Drush voor PHP". Drupal Commerce 2.x kun je uitsluitend via Composer installeren, omdat de hoeveelheid afhankelijkheden handmatige installatie te complex maakt.
Wat de Composer introduction-pagina ervan vindt:
Composer is not a package manager in the same sense as Yum or Apt are. Yes, it deals with "packages" or libraries, but it manages them on a per-project basis, installing them in a directory (e.g. vendor) inside your project. By default it does not install anything globally. Thus, it is a dependency manager. It does however support a "global" project for convenience via the global command. This idea is not new and Composer is strongly inspired by node's npm and ruby's bundler. Suppose: * You have a project that depends on a number of libraries. * Some of those libraries depend on other libraries. Composer: * Enables you to declare the libraries you depend on. * Finds out which versions of which packages can and need to be installed, and installs them (meaning it downloads them into your project).
Installatie
- Composer is in PHP geschreven. Installatie gaat op een manier die gebruikelijk is voor PHP-projecten (geloof ik)
- De 'executable' is uiteindelijk slechts één bestand:
composer.phar
, of afgekort totcomposer
- In eerste aanleg installeer je Composer per project, in de root van het betreffende project. Je kunt Composer ook globaal installeren. Ik heb de indruk dat dat voor de verdere werking weinig verschil maakt
Apt-get werkt niet
sudo apt-get install
werkt niet (begin 2017), omdat ik daarmee een te oude versie krijg. Wat wel werkt:
Globale installatie
/usr/local/bin
is een gebruikelijke locatie voor eigen programmatuur.
sudo mkdir /usr/local/bin/composer cd /usr/local/bin/composer curl -sS https://getcomposer.org/installer | php
In .bashrc
de PATH-variabele uitbreiden, bv. met PATH=/usr/local/bin/composer:$PATH
en source ~/.bashrc
Waarschijnlijk doet dit hetzelfde als het script dat in de officiele documentatie wordt genoemd.
Bijwerken (algemeen)
Waarschijnlijk werk je 'm bij door 'm opnieuw te installeren: Het bestaat uit één PHP-bestand, dus er is effectief geen installatie-procedure (anders dan eventueel aanpassen PATH-variabele).
Voorbeeld: Een bibliotheek installeren
Installatie van libraries voor Drupal
Voorbeeld:
cd /modules/commerce composer install
Composer leest vervolgens het bestand composer.json
en ziet dat er drie libraries benodigd zijn, en installeert ze:
commerceguys/intl library commerceguys/tax library commerceguys/addressing library
Vervolgens wordt het composer.lock
-bestand weggeschrijven. Deze beschrijft de specifieke versies van de betreffende libraries. Altijd handig om versie-conflicten te vermijden.
Casus: Handmatige installatie (2016)
Onduidelijk of dit nog relevant is.
Je kunt Composer per project installeren, of globaal, dus één installatie voor alle projecten op dezelfde webserver. Ik kies deze laatste optie.
Installer downloaden & uitvoeren
cd ~/Downloads curl -sS https://getcomposer.org/installer | php
met als uitvoer:
#!/usr/bin/env php All settings correct for using Composer Downloading... Composer successfully installed to: /home/strompf/Downloads/Composer/composer.phar Use it: php composer.phar
Verplaatsen naar een globaal bereikbare locatie + naam aanpassen
sudo mkdir /usr/local/bin/composer sudo mv composer.phar /usr/local/bin/composer/composer
Locatie toevoegen aan $PATH
Betreffende regel in .bashrc wordt zoiets als:
PATH=/usr/local/bin/composer:$PATH
Bestand uitvoerbaar maken
Als Composer niet uitvoerbaar is, moet je 'm zo aanroepen: php composer.phar
, en als-ie uitvoerbaar is, wordt dat composer.phar
:
chmod +x /usr/local/bin/composer/composer
Test
Niet zo moeilijk:
composer
Wat ik in oktober 2015 een paar keer kreeg als uitvoer (eerste paar regels):
______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.0-dev (f85d965732d9505b69242a070dc0b381c9f6bbab) 2015-10-19 10:04:38
Casus: Installatie mbt. apt-get (begin 2017)
sudo apt-get install composer
Geef daarna desgewenst het commando composer
om te verifiëren dat het werkt.
Achterafgezien blijkt dit niet te werken: Ik krijg een te oude versie!
Casus: Composer bijwerken (mrt. 2017)
Ik heb een te oude versie, want foutmelding
Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing.
Commando
composer -V
geeft:
Composer version @package_branch_alias_version@ (1.0.0-beta2) 2016-03-27 16:00:34
Commando's
sudo apt-get update && sudo apt-get upgrade
helpen niet.
Verwijderen & opnieuw installeren, werkt ook niet, want ik krijg opnieuw een te oude versie:
sudo apt-get purge composer Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: jsonlint php-cli-prompt php-composer-semver php-composer-spdx-licenses php-json-schema php-symfony-console php-symfony-filesystem php-symfony-finder php-symfony-process Use 'sudo apt autoremove' to remove them. The following packages will be REMOVED: composer* 0 upgraded, 0 newly installed, 1 to remove and 2 not upgraded. After this operation, 1,657 kB disk space will be freed. Do you want to continue? [Y/n] y (Reading database ... 211352 files and directories currently installed.) Removing composer (1.0.0~beta2-1) ... Processing triggers for man-db (2.7.5-1) ... sudo apt-get install composer Reading package lists... Done Building dependency tree Reading state information... Done Suggested packages: php-zip Recommended packages: mercurial The following NEW packages will be installed: composer 0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded. Need to get 0 B/283 kB of archives. After this operation, 1,657 kB of additional disk space will be used. Selecting previously unselected package composer. (Reading database ... 211053 files and directories currently installed.) Preparing to unpack .../composer_1.0.0~beta2-1_all.deb ... Unpacking composer (1.0.0~beta2-1) ... Processing triggers for man-db (2.7.5-1) ... Setting up composer (1.0.0~beta2-1) ...
Wat wel werkt
sudo mkdir /usr/local/bin/composer cd /usr/local/bin/composer curl -sS https://getcomposer.org/installer | php PATH=/usr/local/bin/composer:$PATH