Composer: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(18 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
 
''Composer'' is een ''PHP dependency manager'', zoiets als [https://www.youtube.com/watch?v=XOy0sR9NPxM "Drush voor PHP"]. Drupal Commerce 2.x kun je uitsluitend via Composer installeren, omdat de hoeveelheid afhankelijkheden handmatige installatie te complex maakt.
 
''Composer'' is een ''PHP dependency manager'', zoiets als [https://www.youtube.com/watch?v=XOy0sR9NPxM "Drush voor PHP"]. Drupal Commerce 2.x kun je uitsluitend via Composer installeren, omdat de hoeveelheid afhankelijkheden handmatige installatie te complex maakt.
  
Composer werkt op ''locale basis'': Per project wordt er voor gezorgd dat de juiste ''packages'' beschikbaar zijn.
+
Wat de [https://getcomposer.org/doc/00-intro.md Composer introduction-pagina] ervan vindt:
 
 
== Installatie (algemeen) ==
 
 
 
<code>sudo apt-get install</code> werkt niet (begin 2017), omdat ik daarmee een te oude versie krijg. Wat wel werkt:
 
  
 
<pre>
 
<pre>
sudo mkdir /usr/local/bin/composer
+
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
cd /usr/local/bin/composer
+
them on a per-project basis, installing them in a directory (e.g. vendor) inside your project. By default it does not install
curl -sS https://getcomposer.org/installer | php
+
anything globally. Thus, it is a dependency manager. It does however support a "global" project for convenience via the global
</pre>
+
command.
  
In <code>.bashrc</code> de PATH-variabele uitbreiden, bv. met <code>PATH=/usr/local/bin/composer:$PATH</code> en <code>source ~/.bashrc</code>
+
This idea is not new and Composer is strongly inspired by node's npm and ruby's bundler.
  
Waarschijnlijk is het script dat in de [https://getcomposer.org/download/ officiele documentatie] wordt genoemd, ook ok.
+
Suppose:
  
== Bijwerken (algemeen) ==
+
* You have a project that depends on a number of libraries.
 +
* Some of those libraries depend on other libraries.
  
Waarschijnlijk werk je 'm bij door 'm opnieuw te installeren.
+
Composer:
  
== Installatie van libraries voor Drupal ==
+
* 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).
 +
</pre>
  
Voorbeeld:
+
== Installatie ==
  
cd /modules/commerce
+
* Composer is in PHP geschreven. Installatie gaat op een manier die gebruikelijk is voor PHP-projecten (geloof ik)
composer install
+
* De 'executable' is uiteindelijk slechts één bestand: <code>composer.phar</code>, of afgekort tot <code>composer</code>
 +
* 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
  
''Composer'' leest vervolgens het bestand <code>composer.json</code> en ziet dat er drie libraries benodigd zijn, en installeert ze:
+
=== Apt-get werkt niet ===
  
commerceguys/intl library
+
<code>sudo apt-get install</code> werkt niet (begin 2017), omdat ik daarmee een te oude versie krijg. Wat wel werkt:
commerceguys/tax library
 
commerceguys/addressing library
 
  
Vervolgens wordt het <code>composer.lock</code>-bestand weggeschrijven. Deze beschrijft de specifieke versies van de betreffende libraries. Altijd handig om versie-conflicten te vermijden.
+
=== Globale installatie ===
  
== Casus: Handmatige installatie (2016) ==
+
Met behulp van de handleiding op [https://getcomposer.org/download/ getcomposer.org/download] en de [https://www.youtube.com/watch?v=oLWKW-88luA&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT&index=2 eerste tutorial van Lamin Sanneh]:
 
 
''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 '''
 
 
 
<pre>
 
cd ~/Downloads
 
curl -sS https://getcomposer.org/installer | php
 
</pre>
 
 
 
met als uitvoer:
 
  
 
<pre>
 
<pre>
#!/usr/bin/env php
+
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
 
All settings correct for using Composer
 
Downloading...
 
Downloading...
  
Composer successfully installed to: /home/strompf/Downloads/Composer/composer.phar
+
Composer (version 1.4.1) successfully installed to: /home/strompf/Desktop/composer.phar
 
Use it: php composer.phar
 
Use it: php composer.phar
</pre>
 
  
''' Verplaatsen naar een globaal bereikbare locatie + naam aanpassen '''
+
strompf@Dell2017 ~/Desktop $ php -r "unlink('composer-setup.php');"
 
+
strompf@Dell2017 ~/Desktop $ ls
<pre>
+
composer.phar
sudo mkdir /usr/local/bin/composer
+
strompf@Dell2017 ~/Desktop $ php composer.phar
sudo mv composer.phar /usr/local/bin/composer/composer
+
  ______
 +
  / ____/___  ____ ___  ____  ____  ________  _____
 +
/ /  / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
 +
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
 +
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
 +
                    /_/
 +
Composer version 1.4.1 2017-03-10 09:29:45
 +
...
 
</pre>
 
</pre>
  
''' Locatie toevoegen aan $PATH '''
+
Bestand <code>composer.phar</code> staat nu op het buroblad. Die wil ik verplaatsen naar <code>/usr/local/bin</code>. 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:
 
 
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: <code>php composer.phar</code>, en als-ie uitvoerbaar is, wordt dat <code>composer.phar</code>:
 
 
 
chmod +x /usr/local/bin/composer/composer
 
 
 
''' Test '''
 
 
 
Niet zo moeilijk:
 
  
  composer
+
  sudo mv composer.phar /usr/local/bin/composer
  
Wat ik in oktober 2015 een paar keer kreeg als uitvoer (eerste paar regels):
+
En de test:
  
 
<pre>
 
<pre>
 +
strompf@Dell2017 ~/Desktop $ composer
 
   ______
 
   ______
 
   / ____/___  ____ ___  ____  ____  ________  _____
 
   / ____/___  ____ ___  ____  ____  ________  _____
Regel 94: Regel 74:
 
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
 
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
 
                     /_/
 
                     /_/
Composer version 1.0-dev (f85d965732d9505b69242a070dc0b381c9f6bbab) 2015-10-19 10:04:38
+
Composer version 1.4.1 2017-03-10 09:29:45
 +
...
 
</pre>
 
</pre>
  
== Casus: Installatie apt-get (begin 2017) ==
+
Merk op:
 +
 
 +
* Deze locatie is al opgenomen in PATH
 +
* Blijkbaar hoef ik nix te doen met executeerbaar maken van het bestand
 +
* Ook zonder extentie <code>.phar</code> snapt de computer dat dit een PHP-bestand is. Wellicht omdat Linux (meestal) niet werkt met extenties om bestandstypen te identificeren.
  
sudo apt-get install composer
+
== Bijwerken (algemeen) ==
  
Geef daarna desgewenst het commando <code>composer</code> om te verifiëren dat het werkt.
+
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).
  
Achterafgezien blijkt dit niet te werken: Ik krijg een te oude versie!
+
== Voorbeeld: illuminate/support installeren ==
  
== Casus: Composer bijwerken (mrt. 2017) ==
+
=== Achtergrond ===
  
Ik heb een te oude versie, want foutmelding
+
* Dit is het voorbeeld uit [https://www.youtube.com/watch?v=oLWKW-88luA&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT&index=2 Tutorial 2]
 +
* Namen van bibliotheken bestaan uit ''provider/package''
 +
* [https://packagist.org Packagist] is de standaard-repository. [https://packagist.org/packages/illuminate/support Hier] vind je de pagina voor bibliotheek illuminates/support
  
Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing.
+
=== Aan de slag ===
  
Commando
+
* Maak een nieuw domein ''ComposerTest.dvb'' aan op m'n laptop (=ontwikkelserver)
 +
* Ga naar de root van dat domein
 +
* Commando <code>composer init</code> - 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:
  
composer -V
+
<pre>
 +
{
 +
    "name": "strompf/composer-test",
 +
    "authors": [
 +
        {
 +
            "name": "Jeroen Strompf",
 +
            "email": "info@example.com"
 +
        }
 +
    ],
 +
    "require": {}
 +
}
 +
</pre>
  
geeft:
+
Voeg package ''illuminate/support'' toe. Dat kan op verschillende manieren. Ik doe het interactief via de command line:
  
  Composer version @package_branch_alias_version@ (1.0.0-beta2) 2016-03-27 16:00:34
+
  composer require illuminate
  
Commando's
+
Wat er nu gebeurt:
  
sudo apt-get update && sudo apt-get upgrade
+
* 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).
  
helpen niet.
+
=== Bibliotheek toepassen ===
  
Verwijderen & opnieuw installeren, werkt ook niet, want ik krijg opnieuw een te oude versie:
+
Voorbeeld van een php-bestand waarin de betreffende bibliotheek wordt geïncorporeerd (maar toevallig niet wordt gebruikt):
  
 
<pre>
 
<pre>
sudo apt-get purge composer
+
<?php
Reading package lists... Done
+
require("vendor/autoload.php");
Building dependency tree     
+
echo "Composer tutorial";
Reading state information... Done
+
?>
The following packages were automatically installed and are no longer required:
+
</pre>
  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
+
== Installatie van libraries voor Drupal ==
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
+
Voorbeeld:
  
Reading package lists... Done
+
cd /modules/commerce
Building dependency tree     
+
composer install
Reading state information... Done
+
 
Suggested packages:
+
''Composer'' leest vervolgens het bestand <code>composer.json</code> en ziet dat er drie libraries benodigd zijn, en installeert ze:
  php-zip
+
 
Recommended packages:
+
commerceguys/intl library
  mercurial
+
commerceguys/tax library
The following NEW packages will be installed:
+
commerceguys/addressing library
  composer
+
 
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
+
Vervolgens wordt het <code>composer.lock</code>-bestand weggeschrijven. Deze beschrijft de specifieke versies van de betreffende libraries. Altijd handig om versie-conflicten te vermijden.
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) ...
 
</pre>
 
  
''' Wat wel werkt '''
+
== composer create-project ==
  
<pre>
+
https://getcomposer.org/doc/03-cli.md#create-project
sudo mkdir /usr/local/bin/composer
 
cd /usr/local/bin/composer
 
curl -sS https://getcomposer.org/installer | php
 
PATH=/usr/local/bin/composer:$PATH
 
</pre>
 
  
 
== Zie ook ==
 
== Zie ook ==
Regel 187: Regel 167:
 
* http://crossfunctional.net/blog/2013/may/indefinitive-guide-composer-drupal-8
 
* http://crossfunctional.net/blog/2013/may/indefinitive-guide-composer-drupal-8
 
* https://drupalize.me/blog/201408/upgrading-drush-work-drupal-8
 
* https://drupalize.me/blog/201408/upgrading-drush-work-drupal-8
 +
 +
=== Video's Lamin Sanneh ===
 +
 +
* [https://www.youtube.com/watch?v=c7av3YkI5e4&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT PHP Composer Tutorial - 1 Installing and setting up composer part 1]
 +
* [https://www.youtube.com/watch?v=oLWKW-88luA&index=2&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT PHP Composer Tutorial - 2 Installing and setting up composer part 2]
 +
* [https://www.youtube.com/watch?v=YUsktIGGmVI&index=3&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT PHP Composer Tutorial - 3 Installing and setting up composer part 3]
 +
* Etc.

Huidige versie van 19 mrt 2017 om 11:25

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 tot composer
  • 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

Video's Lamin Sanneh