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
Met behulp van de handleiding op getcomposer.org/download en de eerste tutorial van Lamin Sanneh:
cd Desktop/ php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;", 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'InstallInstaller verified php composer-setup.php All settings correct for using Composer Downloading... Composer (version 1.4.1) successfully installed to: /home/strompf/Desktop/composer.phar Use it: php composer.phar strompf@Dell2017 ~/Desktop $ php -r "unlink('composer-setup.php');" strompf@Dell2017 ~/Desktop $ ls composer.phar strompf@Dell2017 ~/Desktop $ php composer.phar ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.4.1 2017-03-10 09:29:45 ...
Bestand composer.phar
staat nu op het buroblad. Die wil ik verplaatsen naar /usr/local/bin
. Omdat het maar één bestand betreft, wil ik dit niet in een map stoppen zoals ik meestal doe. Daarnaast wil ik de extentie achterwege laten:
sudo mv composer.phar /usr/local/bin/composer
En de test:
strompf@Dell2017 ~/Desktop $ composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.4.1 2017-03-10 09:29:45 ...
Merk op:
- Deze locatie is al opgenomen in PATH
- Blijkbaar hoef ik nix te doen met executeerbaar maken van het bestand
- Ook zonder extentie
.phar
snapt de computer dat dit een PHP-bestand is. Wellicht omdat Linux (meestal) niet werkt met extenties om bestandstypen te identificeren.
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: illuminate/support installeren
Achtergrond
- Dit is het voorbeeld uit Tutorial 2
- Namen van bibliotheken bestaan uit provider/package
- Packagist is de standaard-repository. Hier vind je de pagina voor bibliotheek illuminates/support
Aan de slag
- Maak een nieuw domein ComposerTest.dvb aan op m'n laptop (=ontwikkelserver)
- Ga naar de root van dat domein
- Commando
composer init
- Basically overal 'nee' oid. invullen. Ik heb wel naam en emailadres opgegeven. - Nu is er een composer.json-bestand aangemaakt met ca. de volgende inhoude:
{ "name": "strompf/composer-test", "authors": [ { "name": "Jeroen Strompf", "email": "info@example.com" } ], "require": {} }
Voeg package illuminate/support toe. Dat kan op verschillende manieren. Ik doe het interactief via de command line:
composer require illuminate
Wat er nu gebeurt:
- Het json-bestand wordt bijgewerkt
- Een nieuw bestand composer.lock is gegenereerd met daarin de specificaties van de bibliotheken en de gebruikte versies
- De gevraagde bibliotheek wordt gedownload naar map vendor, plus eventuele overige benodigde bibliotheken (oa. autoload.php).
Bibliotheek toepassen
Voorbeeld van een php-bestand waarin de betreffende bibliotheek wordt geïncorporeerd (maar toevallig niet wordt gebruikt):
<?php require("vendor/autoload.php"); echo "Composer tutorial"; ?>
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.
composer create-project
https://getcomposer.org/doc/03-cli.md#create-project
Zie ook
Bronnen
- https://getcomposer.org
- https://getcomposer.org/doc/01-basic-usage.md - Goede handleiding!
- http://crossfunctional.net/blog/2013/may/indefinitive-guide-composer-drupal-8
- https://drupalize.me/blog/201408/upgrading-drush-work-drupal-8