Abhängigkeiten in PHP Projekten mit Composer verwalten. Nils Private Packagist https://packagist.com

Ähnliche Dokumente
Composer für Contao Entwickler

Renée Bäcker. Perl $foo Magazin

Neue Wege mit Contao 4

ReadMe zur Installation der BRICKware for Windows, Version ReadMe on Installing BRICKware for Windows, Version 6.1.2

Mapbender3 für den einfachen Aufbau von WebGIS Anwendungen

Mapbender3. für den einfachen Aufbau von WebGIS Anwendungen. Astrid Emde INTERGEO 2015 Stuttgart. Mapbender3 Astrid Emde INTERGEO Stuttgart 2015

USB Treiber updaten unter Windows 7/Vista

HiOPC Hirschmann Netzmanagement. Anforderungsformular für eine Lizenz. Order form for a license

KURZANLEITUNG. Firmware-Upgrade: Wie geht das eigentlich?

Von SVN zu Git. Daniel Willmann cbna

Upgrade auf TYPO3 6.2

CNC ZUR STEUERUNG VON WERKZEUGMASCHINEN (GERMAN EDITION) BY TIM ROHR

Vorlesung Programmieren. Versionskontrollsysteme. Ziele von VCS. Versionskontrolle

Vom lokalen Build zum Deployment

p^db=`oj===pìééçêíáåñçêã~íáçå=

Apps-Entwicklung mit Eclipse

1. Download der benötigten Software Version 2. Speichern Sie das easytouch Update auf einem leeren USB-Sick (FAT) (max 2 GB) P3 / Mini.

Mapbender3 Workshop. Astrid Emde AGIT 2015 Salzburg

Cameraserver mini. commissioning. Ihre Vision ist unsere Aufgabe

Enigma2 Plugin Entwicklung mit Eclipse

Dezentrale Versionsverwaltung

Die Gentoo-Paketverwaltung

Softwareupdate-Anleitung // Porty L 600 / Porty L 1200

Softwareupdate-Anleitung // AC Porty L Netzteileinschub

Versionierung und Bugtracking mit Git(Hub)

File Server auf Ransomware-Dateien prüfen

Debian Packaging. Sebastian Reichel

How to participate. Einführung in das Bauen von RPM-Paketen

Titelbild1 ANSYS. Customer Portal LogIn

RPM. Einstieg in den RPM-Paketbau. Oliver Burger obgr 25. Oktober Oktober 2012 RPM 1

Crashkurs Subversion / Trac / Provisioning. Jan Zieschang, , Berlin

EGit: Die effiziente Git- Integration in Eclipse

Linux Cafe Referent: Bernd Strößenreuther

Webdeployment 2.0 Webanwendungen komfortabel bereitstellen, aus Hoster und Kundensicht.

Satellite 6. Next Generation System Provisioning, Configuration and Patch Management

Maintainer Schulung (Teil 2)

Installation Guide/ Installationsanleitung. Spring 16 Release

INSTALLATION DES MICROSOFT SUS-SERVERS AUF WINDOWS XP PROFESSIONAL

Apache Subversion (SVN)

Martin Schütte. 6. Brandenburger Linux-Infotag 21. November 2009

URT Eclipse All in one

Entwicklungsumgebungen. Packer, Vagrant, Puppet. Alexander Pacnik Mannheim,

IT Engineering Continuous Delivery. Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet. Alexander Pacnik Karlsruhe,

Apps-Entwicklung mit Netbeans

Handbuch TweetMeetsMage

Worx Landroid - Software Update

JDroidLib mit Eclipse (Mac/Linux/Windows)

Installationsanleitung für die netzbasierte Variante Bis Version 3.5. KnoWau, Allgemeine Bedienhinweise Seite 1

Installation der SAS Foundation Software auf Windows

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Eine Einführung in das verteilte Quelltextverwaltungssystem Git

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Karteninstallation mit dem TomTom WORK Karteninstallationstool

Installationsbeschreibung

/

Typo 3 installieren. Schritt 1: Download von Typo3


netcim Boot-Stick erstellen Version 1.0 ( ) Netree AG CH-4658 Däniken

Installationshinweise Z501J / Z501K Adapter IrDa USB Installation hints Z501J / Z501K Adapter IrDa USB

Software-Engineering Grundlagen des Software-Engineering 7.3 Sourcecode-Verwaltung mit Versionsmanagement-Systemen Einführung in Subversion (SVN)

Katello / Pulp / Candlepin

Installationsanleitung MS SQL Server für Sage 50 Ablage & Auftragsbearbeitung. Sage Schweiz AG D4 Platz 10 CH-6039 Root Längenbold

OpenVMS und OpenSource Ein Widerspruch? peter ranisch

Versionierung und Dateistruktur

How-To-Do. Hardware Configuration of the CC03 via SIMATIC Manager from Siemens

Source Code Verwaltung mit Git

Software-Update zum Buch 3D-Spieleprogrammierung mit DirectX 9 und C++

Einrichten von NIS step by step

TinyMCE. Frederik Leidloff

Installation/Update und Konfiguration des Renderservice (v1.7.0)

Powershell DSC Oliver Ryf

SEW Übung EMFText. 1 Aufgabe. 2 Domänenbeschreibung. 3 Installation von Eclipse/EMFText. 4 Schritt-für-Schritt Anleitung. 4.

Branching und Merging mit Visual Studio Team System

WOZU VERSIONSKONTROLLE?

Gerrit und Jenkins ein Traumpaar für Pre-Tested Commit

Installation mit Lizenz-Server verbinden

NVR Mobile Viewer for iphone/ipad/ipod Touch

opsi-401-releasenotes-upgrade-manual

TYPO3 KNOW-HOW INHALT. von Alexander Busch, MCITP, MCSA 2003, CCA, VCS. Spam-Schutz für Typo Robots.txt in Typo Captcha Extension...

EEX Kundeninformation

Installationsanleitung zur Extension bluegate DirectURL

Systemvoraussetzungen CustomX. Customer Relationship Management

Mapbender3 Workshop. Christian Wygoda. FOSSGIS Dessau 2012

Eingabeprogramm (ENVIO)

oder von 0 zu IaaS mit Windows Server, Hyper-V, Virtual Machine Manager und Azure Pack

Mapbender3 nimmt Fahrt auf

Continuous Delivery. für Java Anwendungen. Axel Fontaine Software Development Expert

150Mbps Micro Wireless N USB Adapter

TimeMachine. Installation und Konfiguration. Version 1.4. Stand Dokument: install.odt. Berger EDV Service Tulbeckstr.

WP2. Communication and Dissemination. Wirtschafts- und Wissenschaftsförderung im Freistaat Thüringen

RIZIV INAMI - LIKIV. eid-anleitung für Mac

MGE Datenanbindung in GeoMedia

Installing OpenBSD. Fabian Heusser; Pascal Näf. April Einleitung Aufgabe Voraussetzungen... 2

AFS / OpenAFS. Bastian Steinert. Robert Schuppenies. Präsentiert von. Und

Fernwartung des Schulservers übers Internet Anleitung ssh - putty winscp - für Arktur v bzw. v

1 Vorraussetzungen. 2 Installiere Eclipse. FS 2015 Herausgabe: Dr. A. L. Schüpbach, D. Sidler, Z. István Departement Informatik, ETH Zurich

FirstWare IDM Portal FreeEdition Quick Start Guide. Version

Transkript:

Abhängigkeiten in PHP Projekten mit Composer verwalten Private Packagist https://packagist.com

Wie installiert man eine PHP Anwendung? - Bevor es los geht: Der alte Weg - README / PDF / Wiki - Betriebssystempakete installieren (z.b. mod_rewrite) - Webserver konfigurieren (Dateien kopieren, Einträge anlegen) - PHP Extensions installieren (z.b. imagick) - PHP Extension abschalten (z.b. mbstring) - PHP konfigurieren - Oder Hoffen dass Hoster die richtigen Dinge installiert / Hoster um Installation bitten

Wie installiert man eine PHP Anwendung? - Bevor es los geht: Der neue Weg - Configuration Management (puppet, chef, ansible, salt, ) - Programm stellt Systemzustand automatisch korrekt her - Vorteile: - weniger manuelle Fehler - leicht wiederherstellbar - z.b. Server kaputt, weitere Server, lokale Staging Umgebung

Wie installiert man eine PHP Anwendung? - Der alte Weg - README / PDF / Wiki - Alle Bibliotheken/Abhängigkeiten im gleichen Repository - Nachteile - Identifikation von Versionen durch manuelles (oft unvollständiges) dokumentieren - Möglicherweise manuell gepatchte Abhängigkeiten - Updates schwierig

Wie installiert man eine PHP Anwendung?

Abhängigkeiten mit Composer verwalten - Ein Befehl zum Herstellen des Systemzustands composer install - Ein Befehl zum (lokalen) Aktualisieren der Abhängigkeiten composer update

Composer Installation php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5 be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');" Überprüft aktuelle Checksumme Deshalb von https://getcomposer.org/download/ installieren

Abhängigkeiten definieren composer.json: - Im Projekt-Root { } "require": { "silex/silex": "~2.0", "symfony/finder": "3.1-dev", "twig/twig": "1.*", "predis/service-provider": "dev-master" "symfony/console": "^3.2.2" }, "require-dev": { "mikey179/vfsstream": "*" }

Alternative Repositories composer.json: "repositories": [ { "type": "composer", "url": "https://repo.packagist.com/my-org/" }, { "type": "vcs", "url": "git://example.org/myrepo.git" }, { "packagist.org": false } ]

Repository Authentication $ composer config --global --auth http-basic.repo.packagist.com naderman 1234-token Writes $COMPOSER_HOME/auth.json - C:\Users\<user>\AppData\Roaming\Composer - /Users/<user>/.composer - $XDG_CONFIG_HOME/composer - usually /home/<user>/.config/composer - /home/<user>/.composer $COMPOSER_HOME/config.json - process-timeout - cache-files-ttl - github-protocols

Abhängigkeiten installieren $ php composer.phar install Installing from lock file - Package twig/extensions (dev-master) Downloading Unpacking archive Cleaning up [...] - Package twig/twig (1.8.0) Downloading Unpacking archive Cleaning up - Package symfony/symfony (dev-master) Downloading Unpacking archive Cleaning up Generating autoload files

Abhängigkeiten verwenden composer.json composer.lock vendor/ autoload.php composer/ monolog/ monolog/ symfony/ symfony/ monolog-bundle/ twig/ twig/ extensions/ [...] web/index.php require DIR. /../vendor/autoload.php

Pakete definieren { } "name": "predis/predis", "type": "library", "description": "Flexible and feature-complete Redis client", "keywords": ["nosql", "redis", "predis"], "homepage": "http://github.com/nrk/predis", "license": "MIT", "authors": [ { "name": "Daniele Alessandri", "email": "suppakilla@gmail.com", "homepage": "http://clorophilla.net" } ], "require": { "php": ">=5.3.9" }, "autoload": { "psr-4": {"Predis\\": "src/"} }

Autoloading für foo/bar - PSR-0 { psr-0 : { Foo\\ : src }} new Foo\Bar\Baz\Qux - vendor/foo/bar/src/foo/bar/baz/qux.php - PSR-4 { psr-4 : { Foo\\Bar\\Baz\\ : src }} new Foo\Bar\Baz\Qux - vendor/foo/bar/src/qux.php - Classmap { classmap : [ src/, library/legacy/ ]} new Foo\Bar\Baz\Qux - vendor/foo/bar/src/some/weird/name.php - Files { files : [ src/some/functions.php ]}

Autoloader Optimierung $ composer dump-autoload --optimize Wandelt PSR-0/4 in Classmap um. $ composer dump-autoload --optimize --apcu Wandelt PSR-0/4 in Classmap um, speichert Classmap in APCu (PHP Extension) $ composer dump-autoload --optimize --classmap-authoritative Wandelt PSR-0/4 in Classmap um, verlässt sich auf opcache, neue Klassen werden nicht gefunden.

Pakete versionieren Semantic Versioning x.y.z (BC-break).(new functionality).(bug fix) http://semver.org/ http://symfony.com/doc/current/contributing/code/bc.html

Versions Constraints - Exact Match: 1.0.0 1.2.3-beta2 dev-master - Wildcard Range: 1.0.* 2.* - Hyphen Range: 1.0-2.0 1.0.0-2.1.0 >=1.0.0 <2.1 >=1.0.0 <=2.1.0 - (Unbounded Range: >= 1.0) Problematisch! - Next Significant Release ~1.2 ~1.2.3 >=1.2.0 <2.0.0 >=1.2.3 <1.3.0 - Caret/Semver Operator ^1.2 ^1.2.3 Beste Wahl für Bibliotheken >=1.2.0 <2.0.0 >=1.2.3 <2.0.0 Operatoren: AND, OR

Stabilitäten - Rangfolge dev -> alpha -> beta -> RC -> stable - Erkennung über Tags 1.2.3 -> stable 1.3.0-beta3 -> beta - Erkennung in Branches Branch -> Version (Stabilität) 2.0 -> 2.0.x-dev (dev) master -> dev-master (dev) myfeature -> dev-myfeature (dev) - Auswählen foo/bar : 1.3.*@beta foo/bar : 2.0.x-dev minimum-stability : alpha

Die Lock Datei: composer.lock - Inhalt - Alle Abhängigkeiten und deren Abhängigkeiten, etc. (transitive Abhängikeiten) - Exakte Version jedes Pakets - Download URLs (source, dist, mirror) - Absicht - Reproduzierbarkeit im Team, für Benutzer und auf verschiedenen Systemen - Isolation von Bug Reports auf eigenen Code vs. Abhängigkeiten - Transparenz über den Update Prozess

Die Lock Datei: composer.lock Die Lock Datei unbedingt mit einchecken und verteilen! Ansonsten - composer install führt ohne lock ein composer update aus - Konflikte können während der Installation passieren - Eventuell wird anderer Code installiert als geplant - Man verliert die Kontrolle über die Abhängigkeiten Die Lock Datei existiert um eingecheckt zu werden!

Abhängigkeiten aktualisieren - $ composer update - Alles auf einmal, keine Isolation - $ composer update <package...> - Einzelne Pakete aktualisieren - $ composer update --with-dependencies <package...> - Einzelne Pakete und ihre Abhängigkeiten - $ composer update --dry-run [--with-dependencies <package...>] - Nichts ausführen, nur ausprobieren und anzeigen

Falls es einen Fehler gibt $ php composer.phar validate./composer.json is valid for simple usage with composer but has strict errors that make it unable to be published as a package: See https://getcomposer.org/doc/04-schema.md for details on the schema name : The property name is required description : The property description is required require.composer/composer : unbound version constraints (dev-master) should be avoided $ php composer.phar self-update $ php composer.phar update -vvv

Wie funktionieren partielle Updates? { name : zebra/zebra, require : { horse/horse : ^1.0 }} { name : giraffe/giraffe, require : { duck/duck : ^1.0 }}

Wie funktionieren partielle Updates? { name : horse/horse, require : { giraffe/giraffe : ^1.0 }} { name : duck/duck, require : {}}

Wie funktionieren partielle Updates? { } name : my-project, require : { zebra/zebra : ^1.0, giraffe/giraffe : ^1.0 }

Wie funktionieren partielle Updates? Project zebra 1.0 horse 1.0 giraffe 1.0 duck 1.0 Now each package releases 1.1

Wie funktionieren partielle Updates? Project zebra 1.1 horse 1.0 giraffe 1.0 duck 1.0 $ composer update --dry-run zebra/zebra Updating zebra/zebra (1.0 -> 1.1)

Wie funktionieren partielle Updates? Project zebra 1.1 horse 1.1 giraffe 1.0 duck 1.0 $ composer update --dry-run zebra/zebra --with-dependencies Updating horse/horse (1.0 -> 1.1) Updating zebra/zebra (1.0 -> 1.1)

Wie funktionieren partielle Updates? Project zebra 1.1 horse 1.0 giraffe 1.1 duck 1.0 $ composer update --dry-run zebra/zebra giraffe/giraffe Updating zebra/zebra (1.0 -> 1.1) Updating giraffe/giraffe (1.0 -> 1.1)

Wie funktionieren partielle Updates? Project zebra 1.1 horse 1.1 giraffe 1.1 duck 1.1 $ composer update zebra/zebra giraffe/giraffe --with-dependencies Updating duck/duck (1.0 -> 1.1) Updating giraffe/giraffe (1.0 -> 1.1) Updating horse/horse (1.0 -> 1.1) Updating zebra/zebra (1.0 -> 1.1)

Forks / Aliase { } "repositories": [ { "type": "vcs", "url": "https://github.com/naderman/symfony-console" } ], "require": { "symfony/symfony-console": "dev-my-patch as 3.3.1" "contao/core-bundle": "1.0.*" }

Nützliche Befehle - composer why foo/bar [-t] mydep/here 1.2.3 requires foo/bar (^1.0.3) - composer why-not foo/bar foo/bar 1.2.3 requires php (>=7.1.0 but 5.6.3 is installed) - composer outdated Displays table of dependencies and available newer versions - composer update --prefer-lowest, --prefer-stable Installiert ältest mögliche stabile Abhängigkeiten

Vielen Dank! Fragen / Feedback? E-Mail: n.adermann@packagist.com Twitter: