[[oktatas:web:composer|< Composer]] ====== Composer projekt készítés ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2021 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== Ebben leírásban Composer segítségével készítünk egy egyszerű PHP projektet, keretrendszerek nélkül. A projektben elkészített program forráskódja: * https://github.com/andteki/triangle ===== Projekt előkészítése ===== Hozzuk létre a projekt fájlt: mkdir triangle cd triangle Készítsük elő a projektet: composer init A futtatás eredményeként egy interaktív programot kapunk, ahol kimenet ehhez hasonló: composer init Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (/) [janos/triangle]: Description []: Háromszog számítások Author [Nagy Janos , n to skip]: Minimum Stability []: dev Package Type (e.g. library, project, metapackage, composer-plugin) []: 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\Haromszog" to the entered relative path. [src/, n to skip]: { "name": "janos/triangle", "description": "Háromszog számítások", "license": "MIT", "autoload": { "psr-4": { "Janos\\Triangle\\": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "minimum-stability": "dev", "require": {} } Do you confirm generation [yes]? y Generating autoload files Generated autoload files PSR-4 autoloading configured. Use "namespace Janos\Triangle;" in src/ Include the Composer autoloader with: require 'vendor/autoload.php'; ===== Használat ===== Hozzuk létre a projekt src könyvtárban a Shape könyvtárakat. mkdir src/Shape Javítsuk a composer.json fájlban a psr-4 bejegyzést: "autoload": { "psr-4": { "Shape\\": "src/Shape" } }, Futtassuk a composer dump-autoload parancsot, hogy frissítse a vendor könyvtárban található autoload.php fájlt: composer dump-autoload Ha valamit változtatunk az autoload szekción, akkor futtassuk ezt a parancsot. Írjuk meg a Triangle osztályt, a Shape könyvtáron belül: A fájl útvonala így: src/Shape/Triangle.php ===== Teszt írása ===== Készítsünk hozzá egy tesztet: ===== Teszt futtatása ===== Végezzük el tesztet: php tests/testTriangle.php A tesztet megnézhetjük PHP szerveren is: php -S localhost:8000 -t tests A böngészőbe írjuk: localhost:8000/testTriangle.php ===== Script írása ===== Írjunk scriptet, ami elvégzi tesztet. Szerkesszük a composer.json fájlt. Adjuk hozzá a következő részt: "scripts": { "test": ["php tests/test.php", "echo Teszt indul"] } A composer.json teljes tartalma most: { "name": "janos/lap", "description": "Teszt weblap", "autoload": { "psr-0": { "HelloWorld": "src/" } }, "authors": [ { "name": "Nagy Janos", "email": "janos@zold.lan" } ], "minimum-stability": "dev", "require": { "php": ">=5.5.0" }, "scripts": { "test": ["echo Teszt indul", "php tests/testTriangle.php"] } } A teszt indítás most: composer run test ===== Külső függőség használata ===== Időzítőt szeretnénk a fejlesztési idő alatt használni. Szeretnénk megmérni mennyi ideig tart a futás. Telepítsük ehhez a phpunit/php-timer csomagot: composer require --dev phpunit/php-timer Írjuk át a testTriangle.php állományunkat a használathoz: start(); echo Triangle::calcArea(30, 35) . "\n"; $duration = $timer->stop(); print $duration->asSeconds() . "\n"; Futtassuk újra a tesztet: composer run test A kimenet most ehhez hasonló: > echo Teszt indul Teszt indul > php tests/testTriangle.php 525 0.000203483 ===== Verziókövetés ===== A vendor könyvtár és a composer.lock fájl tartalmát nem szeretnénk tárolni, ezért írjuk be őket a .gitignore fájlba. vendor composer.lock git init git add src tests composer.json git commit -m "Kezdés" ===== Könyvtárszerkezet ===== A könyvtárszerkezet most a teljesség igénye nélkül: haromszog/ |-src/ | `-Shape/ | `-Triangle.php |-test/ | `-testTriangle.php |-vendor/ | |-composer/ | `-autoload.php `-composer.json ===== PHP Unit teszt ===== A phpunit/phpunit csomagot fogjuk használni: * https://packagist.org/packages/phpunit/phpunit composer require --dev phpunit/phpunit A testTriangle.php fájl most békén hagyjuk, és helyett egy TriangleTest.php fájlt készítünk. require_once __DIR__.'/../vendor/autoload.php'; use Shape\Triangle; use PHPUnit\Framework\TestCase; class TriangleTest extends TestCase { public function testCalcArea() { $triangle = new Triangle(); $this->assertEquals(525, $triangle->calcArea(30, 35)); } } A tesztelés előtt nézzük meg milyen phpunit parancsunk van. Ha globálisan telepítve van, nézzük meg: phpunit --version Használhatjuk a helyi vendor könyvtárba letöltött változatot is: ./vendor/bin/phpunit ==== A teszt futtatása ==== phpunit tests Vagy: ./vendor/bin/phpunit tests A keletkezett .phpunit.result.cache fájlnév felvehető a .gitignore fájlba. ===== Függőségek telepítése ===== A már beállított függőségek telepítése: composer install npm install && npm run dev ===== Források ===== * https://phpunit.de/getting-started/phpunit-5.html (2021) * https://github.com/sebastianbergmann/php-timer (2021) * https://getcomposer.org/doc/01-basic-usage.md (2021)