Zaczynam korzystać z narzędzia Composer, niewiele o nim wiem i mam niewielkie doświadczenie w tworzeniu aplikacji internetowych.
Po prostu przechodzę przez Nettuts + Tutorial , więc mam podstawowe pytanie dotyczące kompozytora.
{
"require": {
"laravel/framework": "4.0.*",
"way/generators": "dev-master",
"twitter/bootstrap": "dev-master",
"conarwelsh/mustache-l4": "dev-master"
},
"require-dev": {
"phpunit/phpunit": "3.7.*",
"mockery/mockery": "0.7.*"
},
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
"scripts": {
"post-update-cmd": "php artisan optimize"
},
"minimum-stability": "dev"
}
- Cokolwiek pojawi się
"require-dev"
częściowo, zostanie pobrane i zainstalowane tylko zcomposer install --dev
? - Przeczytałem część dokumentacji kompozytora, ale nadal nie rozumiem, z jakiego powodu mamy
"require-dev"
część? Czy to dlatego, że chcemy uzyskać konkretną wersję pakietu, a raczej zawsze otrzymując najnowszą stabilną wersję?
composer-php
Rzemieślnik
źródło
źródło
Odpowiedzi:
Różne środowiska
Zazwyczaj oprogramowanie będzie działać w różnych środowiskach:
development
testing
staging
production
Różne zależności w różnych środowiskach
Zależności, które są zadeklarowane w
require
sekcji,composer.json
są zwykle zależnościami, które są wymagane do uruchomienia aplikacji lub pakietu wstaging
production
środowiskach, podczas gdy zależności zadeklarowane w
require-dev
sekcji są zwykle zależnościami, które są wymagane wdeveloping
testing
środowiskach.
Na przykład oprócz pakietów używanych do faktycznego uruchamiania aplikacji mogą być potrzebne pakiety do tworzenia oprogramowania, takie jak:
friendsofphp/php-cs-fixer
(aby wykryć i naprawić problemy ze stylem kodowania)squizlabs/php_codesniffer
(aby wykryć i naprawić problemy ze stylem kodowania)phpunit/phpunit
(do kierowania rozwojem za pomocą testów)Rozlokowanie
Teraz, w środowiskach
development
itesting
, zwykle byłbyś uruchamianyaby zainstalować oba
production
idevelopment
zależności.Jednak w środowiskach
staging
iproduction
chcesz zainstalować tylko zależności, które są wymagane do uruchomienia aplikacji, a jako część procesu wdrażania zazwyczaj uruchamia sięzainstalować tylko
production
zależności.Semantyka
Innymi słowy, sekcje
require
require-dev
wskaż,
composer
które pakiety powinny zostać zainstalowane podczas uruchamianialub
To wszystko.
Uwaga Zależności programistyczne pakietów, od których zależy Twoja aplikacja lub pakiet, nigdy nie zostaną zainstalowane
Aby uzyskać więcej informacji, zobacz:
źródło
vendor
folder przez FTP?—no-dev
. Ponadto FTP będzie prawdopodobnie dość powolny.composer.json
- patrz na przykład github.com/FriendsOfPHP/PHP-CS-Fixer/tree/2.16/dev-tools .Według instrukcji kompozytora :
Zatem uruchomienie
composer install
spowoduje również pobranie zależności programistycznych.Powód jest właściwie dość prosty. Wnosząc wkład do konkretnej biblioteki, możesz chcieć uruchomić zestawy testów lub inne narzędzia programistyczne (np. Symfony). Ale jeśli zainstalujesz tę bibliotekę w projekcie, te zależności programistyczne mogą nie być wymagane: nie każdy projekt wymaga modułu uruchamiającego testy.
źródło
Ze strony kompozytora (to wystarczająco jasne)
Korzystając z require-dev w Composerze, możesz zadeklarować zależności, których potrzebujesz do tworzenia / testowania projektu, ale nie potrzebujesz ich w produkcji. Po przesłaniu projektu na serwer produkcyjny (za pomocą git)
require-dev
część zostanie zignorowana.Sprawdź również tę odpowiedź opublikowaną przez autora oraz ten post .
źródło
sekcja require Ta sekcja zawiera pakiety / zależności, które są lepszymi kandydatami do zainstalowania / wymaganych w środowisku produkcyjnym.
Sekcja require-dev: Ta sekcja zawiera pakiety / zależności, które mogą zostać użyte przez programistę do przetestowania jej kodu (lub do eksperymentowania na jej lokalnej maszynie, a ona nie chce, aby te pakiety były instalowane w środowisku produkcyjnym).
źródło
Ogólna zasada jest taka, że chcesz pakiety z sekcji require-dev tylko w środowiskach programistycznych (deweloperskich), na przykład w środowisku lokalnym.
Pakiety w sekcji require-dev to pakiety, które pomagają debugować aplikację, uruchamiać testy itp.
W środowisku pomostowym i produkcyjnym prawdopodobnie potrzebujesz tylko pakietów z sekcji Require .
Ale w każdym razie możesz uruchomić composer install --no-dev i composer update --no-dev na dowolnym środowisku, polecenie zainstaluje tylko pakiety z wymaganej sekcji, a nie z require-dev , ale prawdopodobnie chcesz to uruchomić tylko na etapie przemieszczania i produkcji środowiska nie lokalne.
Teoretycznie możesz umieścić wszystkie pakiety w sekcji require i nic się nie stanie, ale nie chcesz tworzyć pakietów na środowisku produkcyjnym z następujących powodów:
Dobrymi kandydatami do require-dev są:
możesz zobaczyć, co robią powyższe pakiety i zobaczysz, dlaczego nie potrzebujesz ich na produkcji.
Zobacz więcej tutaj: https://getcomposer.org/doc/04-schema.md
źródło
Zwróć uwagę na require-dev (tylko root-only) !
co oznacza, że sekcja require-dev jest prawidłowa tylko wtedy, gdy twój pakiet jest katalogiem głównym całego projektu. To znaczy, jeśli uruchamiasz
composer update
z folderu pakietu.Jeśli stworzysz wtyczkę dla jakiegoś głównego projektu, który ma swój własny plik composer.json, wtedy Twoja sekcja require-dev zostanie całkowicie zignorowana! Jeśli potrzebujesz swoich zależności deweloperskich, musisz przenieść swoje require-dev do composer.json w głównym projekcie.
źródło