[[oktatas:web:composer|< Composer]] ====== Composer kezdés ====== * **Szerző:** Sallai András * Copyright (c) 2019, Sallai András * Szerkesztve: 2019, 2021, 2024 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== A Composerről ===== A Composer egy függőségkezelő eszköz, amelyet PHP programok számára találtak ki. A Composer php nyelven íródott, a terjesztése is egy .phar kiterjesztésű (PHP archív) fájlban történik. A composer nem globális telepítésre lett kitalálva, de a Debian GNU/Linux például tartalmazza csomag formájában. ===== Telepítés ===== A Composer nem globális telepítésre lett kitalálva, de azért ez is megoldható. Ha szeretnék a legújabbat használni, Linux alatt tegyük a következőket (két külön parancs): curl https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer Az mv parancsot rendszergazdaként kell kiadni. Debian GNU/Linux alatt csomagként is elérhető, de ajánlott az előző módszer: apt install composer Windows alatt szerezzük be a Composer-Setup.exe telepítőt: * https://getcomposer.org/Composer-Setup.exe Ha kész a telepítése nézzük meg a composer verziónkat: composer -V Ezt ajánlott szimpla felhasználóként megtenni. A composer frissítése: composer selfupdate ===== Új projekt ===== ==== Projekt helyben ==== A következő lépésre nincs szükség, ha globálisan telepítve van a composer és azt szeretnénk használni. Kezdjünk egy új projektet, töltsük le a helyi könyvtárba a composert: mkdir projekt01 cd porjekt01 curl -sS https://getcomposer.org/installer | php A futtatáshoz szükség van parancssoros php-ra. Debian GNU/Linuxon ez a php7.0-cli segítségével érhető el. A telepített program valójában php7.0, de van egy rámutató php szimbolikus link. ./composer.phar init Ekkor elindul a **Composer config generator**. ==== Globális composer használata ==== mkdir projekt01 cd projekt01 Indítsuk a compozert: compozer init ===== A generátor ===== A generátor -- mint fentebb láttuk -- a composer init vagy a ./composer.phar init paranccsal elindul. A következőhöz hasonlót látunk: ./composer.phar init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (/) [janos/projekt01]: Description []: teszt projekt Author [Nagy Janos , n to skip]: Minimum Stability []: Package Type (e.g. library, project, metapackage, composer-plugin) []: n License []: MIT Define your dependencies. Would you like to define your dependencies (require) interactively [yes]? n Would you like to define your dev dependencies (require-dev) interactively [yes]? n Add PSR-4 autoload mapping? Maps namespace "Janos\Projekt01" to the entered relative path. [src/, n to skip]: { "name": "janos/projekt01", "description": "teszt projekt", "type": "n", "license": "MIT", "autoload": { "psr-4": { "Janos\\Projekt01\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "require": {} } Do you confirm generation [yes]? y Generating autoload files Generated autoload files PSR-4 autoloading configured. Use "namespace Janos\Projekt01;" in src/ Include the Composer autoloader with: require 'vendor/autoload.php'; ===== Elkészült váz ===== A futtatás után létrejön egy composer.json fájl: { "name": "janos/janos01", "description": "teszt projekt", "type": "n", "license": "MIT", "autoload": { "psr-4": { "Janos\\Projket01\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "require": {} } A composer.json fájlt ajánlott felvenni a verziókövetkő rendszerre: git add composer.json git commit -m "add composer.json" ===== Függőségek felvétele ===== Szeretnénk a bootstrap-t használni. ./composer.phar require Lehetséges kimenet: ./composer.phar require Search for a package: bootstrap Found 15 packages matching bootstrap [0] twbs/bootstrap [1] fortawesome/font-awesome [2] twitter/bootstrap [3] almasaeed2010/adminlte [4] twbs/bootstrap-sass [5] snapappointments/bootstrap-select [6] nette/bootstrap [7] kartik-v/bootstrap-star-rating [8] kartik-v/bootstrap-fileinput [9] eternicode/bootstrap-datepicker [10] bootstrap-select/bootstrap-select [11] sonata-project/doctrine-orm-admin-bundle [12] sonata-project/admin-bundle [13] orchid/platform [14] nette/forms Enter package # to add, or the complete package name if it is not listed: 6 Enter the version constraint to require (or leave blank to use the latest version): Using version ^3.1 for nette/bootstrap Search for a package: ./composer.json has been updated Running composer update nette/bootstrap Loading composer repositories with package information Updating dependencies Lock file operations: 8 installs, 0 updates, 0 removals - Locking nette/bootstrap (v3.1.1) - Locking nette/di (v3.0.9) - Locking nette/finder (v2.5.2) - Locking nette/neon (v3.2.2) - Locking nette/php-generator (v3.5.4) - Locking nette/robot-loader (v3.4.1) - Locking nette/schema (v1.2.1) - Locking nette/utils (v3.2.3) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 8 installs, 0 updates, 0 removals - Downloading nette/finder (v2.5.2) - Downloading nette/robot-loader (v3.4.1) - Downloading nette/php-generator (v3.5.4) - Downloading nette/neon (v3.2.2) - Downloading nette/di (v3.0.9) - Downloading nette/bootstrap (v3.1.1) - Installing nette/utils (v3.2.3): Extracting archive - Installing nette/schema (v1.2.1): Extracting archive - Installing nette/finder (v2.5.2): Extracting archive - Installing nette/robot-loader (v3.4.1): Extracting archive - Installing nette/php-generator (v3.5.4): Extracting archive - Installing nette/neon (v3.2.2): Extracting archive - Installing nette/di (v3.0.9): Extracting archive - Installing nette/bootstrap (v3.1.1): Extracting archive 3 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files Létrejön egy vendor könyvtár és egy **composer.lock**. A teljesség igénye nélkül: Projekt01 |--vendor/ | |--components/ | |--nette | | |--bootstrap/ | | |--di/ | | |--finder/ | | |--neon/ | | |--php-generator/ | | |--robot-loader/ | | |--schema/ | | `--utils/ | `--autoload.php |--composer.json |--composer.lock `--composer.phar A **composer.lock** fájlban rögzül, a letöltött függőség verziószáma. Így a projekt mindig ehhez a verzióhoz fog kötődni. A composer.lock fájl is mehet a verziókezelő tárolójába: git add composer.lock git commit -m "add composer.lock" Ha a monolog nevű PHP csomagot szeretnénk a projektünkhöz adni: ./composer.phar require Search for a package: monolog ... A composer.json állomány most a következő képen néz ki: { "name": "janos/projekt01", "description": "teszt projekt", "type": "n", "license": "MIT", "autoload": { "psr-4": { "Janos\\Projekt01\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "require": { "nette/bootstrap": "^3.1", "monolog/monolog": "^2.3" } } ===== Csomag fejlesztési időben ===== Most olyan függőséget szeretnénk telepíteni, amely csak fejlesztési időben része a projektnek: ./composer.phar require --dev Ha telepítjük a phpunit függőséget, a composer.json most így néz ki: { "name": "janos/projekt01", "description": "teszt projekt", "type": "n", "license": "MIT", "autoload": { "psr-4": { "Janos\\Projekt01\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "require": { "nette/bootstrap": "^3.1", "monolog/monolog": "^2.3" }, "require-dev": { "phpunit/phpunit": "^9.5" } } ===== Az autoloader újragenerálása ===== composer dumpautoload vagy: composer dump-autoload ===== Kézi szerkesztés ===== A .json állomány szerkeszthető egy szövegszerkesztővel is. nano composer.json Ilyenkor érdemes a szerkesztés után a fájl érvényességét megvizsgálni: composer validate ===== composer parancsok ===== A composer.json fájl generálása, interaktív módon. composer init Függőség törlése composer remove Például: composer remove components/jquery A composer.json fájl ellenőrzése: composer diagnose Ez a parancs jóval több ellenőrzést végez mint a validate. Függőségek telepítése a composer.lock alapján: composer install Függőségek telepítése a composer.json fájl alapján. Generálja vagy frissíti a composer.lock fájlt. composer update ===== A Composer csomagjai ===== A Composer csomagjai két részből állnak: | vendor | csomagnév | A vendor sokszor megegyezik a csomagnévvel. A Composer csomagjai között a következő helyen tallózhatunk: * https://packagist.org/ Ha egy csomagot látunk a packagist.org weboldalon, de a ./composer.phar require futtatásakor megjelenő kereső nem találja, meg csak írjuk be a vendor és a csomagnevet, a composer telepíti. Például: components/jquery phpoffice/phpspreadsheet