Composer: verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
Regel 32: Regel 32:
 
<code>sudo apt-get install</code> werkt niet (begin 2017), omdat ik daarmee een te oude versie krijg. Wat wel werkt:
 
<code>sudo apt-get install</code> werkt niet (begin 2017), omdat ik daarmee een te oude versie krijg. Wat wel werkt:
  
=== Globale installatie ===
+
=== Globale installatie (1) ===
  
 
<code>/usr/local/bin</code> is een gebruikelijke locatie voor eigen programmatuur.
 
<code>/usr/local/bin</code> is een gebruikelijke locatie voor eigen programmatuur.
Regel 45: Regel 45:
 
* Waarschijnlijk doet dit hetzelfde als het script dat in de [https://getcomposer.org/download/ officiele documentatie] wordt genoemd.
 
* Waarschijnlijk doet dit hetzelfde als het script dat in de [https://getcomposer.org/download/ officiele documentatie] wordt genoemd.
 
* Nog beter: Zie [https://www.youtube.com/watch?v=c7av3YkI5e4&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT&index=1 Lamin Sanneh's eerste video]
 
* Nog beter: Zie [https://www.youtube.com/watch?v=c7av3YkI5e4&list=PLZU0qJlzY07WwVlxzHMwN0pJmMrc7LMLT&index=1 Lamin Sanneh's eerste video]
 +
 +
=== Globale installatie (2) ===
 +
 +
Met behulp van de handleiding op [https://getcomposer.org/download/ getcomposer.org/download]:
 +
 +
<pre>
 +
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
 +
...
 +
</pre>
 +
 +
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:
 +
 +
sudo mv composer.phar /usr/local/bin/composer
 +
 +
En de test:
 +
 +
<pre>
 +
strompf@Dell2017 ~/Desktop $ composer
 +
  ______
 +
  / ____/___  ____ ___  ____  ____  ________  _____
 +
/ /  / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
 +
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
 +
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
 +
                    /_/
 +
Composer version 1.4.1 2017-03-10 09:29:45
 +
...
 +
</pre>
 +
 +
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.
  
 
== Bijwerken (algemeen) ==
 
== Bijwerken (algemeen) ==

Versie van 19 mrt 2017 10:50

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 (1)

/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

Globale installatie (2)

Met behulp van de handleiding op getcomposer.org/download:

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: Een bibliotheek installeren

  • Maak projectmap aan ComposerTest

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.

Zie ook

Bronnen

Video's Lamin Sanneh