[[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