Discutii despre composer.json si composer.lock

Stefanescu Mihai 2 years ago iNoob

Mi-am dat seama ca nu stiu prea multe lucruri despre composer, mai exact nu stiu ce face composer.json, ce e composer.lock, care este diferenta dintre composer install si composer update...asa ca am inceput sa citesc.

Asa ca am decis sa impart si cu voi aceste infomatii, in acest articol.

Ce este composer?

Composer este un manager de dependinte pentru PHP, iti permite sa foloseste pachetele de care aplicatia ta are nevoie pentru a functiona. 

Hai sa facem o lista cu ce stie composer sa faca:

  • Stiu sa faca management de dependinte

  • Autoloading PSR

  • Optimizarea compilatorului pentru o viteza mai mare

  • Este conectat la ciclul de viata al aplicatiei si se poate conecta la diferite evenimente (ex: installed, updated, created, etc)

  • Verificarea stabilitatii

Folosind editorul de text preferat, haideti sa deschidem composer.json din root-ul proiectului tau. 

Informatii Meta

In prima parte a fisierului gasim meta informatiile:

"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
"keywords": [
"framework",
"laravel"
],
"license": "MIT",

 

Aceste informatii sunt folosite de Packagist, site care catalogheaza pachetele disponibile. Ca si standard, daca vreti sa scrieti un pachet ce va fi disponibil pe packagist trebuie sa da-ti numele pachetului la fel ca repository-ul de pe github.

Manager de dependinte

Apoi, gasim blocul de require, bloc ce ne ajuta la managementul dependintelor. In clipa de fata continutul acestui bloc ar trebui sa fie destul de simplu, avand in vedere ca avem numai laravel-ul.

"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.8.*",
"laravel/tinker": "^1.0"
},

Pare destul de simplu, nu? O chestie pe care vreau sa o mai discut aici este versiunea. Dupa cum vedeti,pot aparea mai multe valori, de exemplu ^4.0, ~4.1, >=1.0, <1.1, etc. Eu am sa scriu o explicatie scurta aici, dar mai multe informatii puteti gasi aici:  https://getcomposer.org/doc/01-basic-usage.md#package-version-constraints

Nume

Exemplu

Descriere

Versiune exacta

1.0.2

Putem specifica versiunea exacta a unui pachet

Range

>=1.0

>=1.0,<2.0

>=1.0,<1.1 | >=1.2

Folosind acest operator putem specifica o gama mai mare de versiuni.

Operatorii pe care ii putem folosi: >, >=, <, <=, !=

Wildcard

1.0.*

Putem folosi aceasta notatie pentru o versiune intre 1.0 si 1.1 a pachetului

Tilda

~1.2

Aceasta notatie este la egala cu >=1.2, <2.0

Autoloading

Mai sus am scris despre composer ca vine cu un autoloader, ba chiar si un sistem de optimizare pentru PHP. Stie sa faca aceste lucruri datorita sectiunii de autoload sin composer.json

"autoload": {
    "psr-4": {
        "App\\": "app/"
    },
    "classmap": [
        "database/seeds",
        "database/factories"
    ]
},

Aici putem folosi autoload-ul PSR (daca nu stii ce este asta poti citi aici: https://www.php-fig.org/psr/psr-4/). Laravel 5 foloseste PSR-4, spre deosebire de Laravel 4. 

Ce se intampla in codul de mai sus? Pai autoloader-ul va cautafisierele din folderul app/ si le va incarca in aplicatie, de exeplu daca avem un fisier app/Services/FooService.php cu namespace-ul App\Services\FooService il vom putea folosi in alte fisiere folosind sintaxa use App\Services\FooService;

Scripturi si Hook-uri in lifecycle

Acum o sa discutam despre o serie de scripturi ce pot fi executate dupa composer install, update sau create-project.

"scripts": {
    "post-autoload-dump": [
        "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
        "@php artisan package:discover --ansi"
    ],
    "post-root-package-install": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ],
    "post-create-project-cmd": [
        "@php artisan key:generate --ansi"
    ]

}

Composer ne permite sa ne legam la anumite evenimente pentru a rula automat comenzi. Eu unul le folosesc pentru chestii gen migratii atunci cand fac deploy pe server. Deploy-ul poate fi redus la 2 pasi simpli:

  1. git pull

  2. composer install

Atentie totusi, acesta este un articol despre composer, nu despre procesul de deployment.

Diferenta dintre composer update si composer install

In primul rand composer update face 2 lucruri

    1.va updata pachetele required la ultima versiune declarata

    2.va updata composer.lock cu versiunile exacte

Composer install va instala dependintele listate in composer.lock, in schimb, daca acest fisier nu exista, aceasta comanda va face fix acelasi lucru ca si composer update.

Sa ne gandim la urmatoarea situatie, rulam composer pe masina 1, iar mai tarziu si pe masina 2. Trebuie sa ne asiguram ca pachetele folosite sunt identice pe ambele masini. Daca rulam composer update pentru fiecare masina pe rand exista o sansa ca pachetele folosite sa difere. Ne putem imagina ca un anumit feature al unui pachet la o versiune functioneaza bine, iar la alta versiune da eroare...din asta va rezulta ca masina cu a doua versiunbe a pachetului sa dea eroare si noi sa nu ne putem da seama de la ce este

In acest caz am putea sterge vendorul din .gitignore si sa comitem totul, dar exista o metoda mai buna. Fisierul .lock are deja hash-urile necesare, care nu ar trebui sa se schimbe, iar noi il putem folosi in avantajul nostru urmand urmatorul principiu: Pe mediul de dev rulam numai composer update, niciodata pe mediul de prod.

Stability

Am ajuns aproape desfarsitul fisierului composer.json

"config": {
    "optimize-autoloader": true,
    "preferred-install": "dist",
    "sort-packages": true
},

 

Composer poate lua pachetele din codul sursa sau din din zip-uri, tocmai pentru asta se foloseste flag-ul preferred-install. Mai multe inforamtii despre acest flag:  https://getcomposer.org/doc/06-config.md#preferred-install

Rulare

Composer poate fi descarcat de pe https://getcomposer.org/. O data ce a fost instalat, il  putem verifica folosind comanda

composer -v

Mai sunt si alte comenzi, de exemplu in loc sa editam fisierul composer.json putem folosi comanda

composer require

Alta comanda utila este validate, oricata experienta ai avea tot este bine sa te asiguri ca totul este scris corect dupa fiecare modificare facuta.

Programator de ~8 ani, am lucrat la proiecte din mai multe industrstrii, de la eCommerce la telecomunicatii la automatizari. In acest timp am folosi diferite tehnologii, de la PHP, MySQL, PostgreSql, RabbitMq, Redis, Memcached si altele.


Get in touch
Pentru nelamuriri, dubii, comentarii si chestii de pe suflet ne putem auzi pe Discord, Reddit sau poti deschide o discutie noua pe forum

Nwahbs # 1 month ago buy fenofibrate 160mg without prescription <a href="https://fenoficor.com/">oral tricor</a> oral fenofibrate 200mg
Jdzklx # 1 month ago buy generic zaditor <a href="https://geozipin.com/">ziprasidone price</a> buy imipramine paypal
Mteyeb # 1 month ago minoxidil over the counter <a href="https://abcelemax.shop/">tamsulosin 0.2mg pill</a> generic ed pills
Ziondk # 1 month ago order precose 25mg sale <a href="https://dipyxcin.com/">cheap griseofulvin</a> order fulvicin 250 mg online
Ajhvye # 4 weeks ago dipyridamole without prescription <a href="https://plenpid.com/">plendil for sale</a> buy pravachol medication
Syjquy # 3 weeks ago buy generic florinef over the counter <a href="https://pravinef.shop/">generic florinef 100mcg</a> loperamide 2mg ca
Lmmonu # 3 weeks ago order duphaston 10 mg online <a href="https://janozin.com/">sitagliptin us</a> jardiance brand
Thanh # 3 weeks ago I was suggested this web site by my cousin. I'm not sure whether this post is written by him as no one else know such detailed about my trouble. You are amazing! Thanks!
Tgckdk # 3 weeks ago order monograph 600mg pills <a href="https://benedolac.shop/">order monograph 600 mg online cheap</a> pletal 100mg cost
Setipw # 3 weeks ago prasugrel where to buy <a href="https://thoramine.shop/">buy dramamine 50 mg without prescription</a> detrol 1mg cost
Jaunita # 2 weeks ago Do you mind if I quote a couple of your articles as long as I provide credit and sources back to your site? My blog site is in the very same area of interest as yours and my visitors would definitely benefit from some of the information you provide here. Please let me know if this okay with you. Appreciate it!
Candida # 2 weeks ago Hi, i think that i saw you visited my site thus i came to “return the favor”.I am attempting to find things to improve my web site!I suppose its ok to use a few of your ideas!!
Medikamente werden schnell versandt # 2 weeks ago Fine way of describing, and pleasant paragraph to take data about my presentation focus, which i am going to deliver in academy.
Uzfxmo # 2 weeks ago ferrous sulfate pills <a href="https://fertonel.shop/">buy actonel 35 mg pills</a> sotalol 40mg for sale
online aankoop van prednisolone in Spanje # 2 weeks ago The other day, while I was at work, my sister stole my iphone and tested to see if it can survive a forty foot drop, just so she can be a youtube sensation. My iPad is now broken and she has 83 views. I know this is entirely off topic but I had to share it with someone!
Rhisna # 2 weeks ago mestinon without prescription <a href="https://mestien.com/">buy pyridostigmine 60mg online</a> buy rizatriptan 10mg for sale
Uctbqs # 2 weeks ago enalapril us <a href="https://duphstine.com/">order lactulose bottles</a> buy generic lactulose over the counter
snapitf # 2 weeks ago <a href=https://www.sapporovn.com/fairy-godmother-dress-up-dressde>fairy godmother dress up</a><a href=https://www.sapporovn.com/mars-twist-mini-dress-dressde>mars twist mini dress</a><a href=https://www.sapporovn.com/blouses-for-large-busted-ladies-dressde>blouses for large busted ladies</a><a href=https://www.sapporovn.com/flowy-sparkly-dress-dressde>flowy sparkly dress</a> <a href="https://www.tiopepi.net/how-to-make-baby-hat-crochet-pattern-generator-capy">how to make baby hat crochet pattern generator</a> <a href="https://www.execedits.net/kansas-city-royals-safari-hat-70-capu">kansas city royals safari hat 70</a> <a href="https://www.felicatech.com/ralph-lauren-navy-blue-shorts-poloy">ralph lauren navy blue shorts</a><a href="https://www.felicatech.com/lacoste-t-shirt-outlet-poloy">lacoste t shirt outlet</a><a href="https://www.felicatech.com/boohooman-body-warmer-poloy">boohooman body warmer</a><a href="https://www.felicatech.com/jcpenney-long-sleeve-t-shirts-poloy">jcpenney long sleeve t shirts</a> <a href="https://www.smtlrtcc.net/high-low-mother-of-the-bride-dresses-dressbo">high low mother of the bride dresses</a> <a href=https://www.thestmc.com/golden-state-warriors-city-edition-shorts-jerseynl>golden state warriors city edition shorts</a><a href=https://www.thestmc.com/knicks-tie-dye-shirt-jerseynl>knicks tie dye shirt</a><a href=https://www.thestmc.com/cavs-sleeves-jerseynl>cavs sleeves</a><a href=https://www.thestmc.com/miami-tyler-herro-jersey-jerseynl>miami tyler herro jersey</a> [url=http://www.snapitf.com/]snapitf[/url]
Lwgewx # 1 week ago oral latanoprost <a href="https://aelimax.shop/">purchase xalatan</a> buy rivastigmine pills
Cvseya # 1 week ago order betahistine sale <a href="https://duphstine.shop/">cost betahistine</a> buy generic benemid over the counter
Von Ärzten empfohlene Medikamente # 1 week ago I have been exploring for a little for any high quality articles or weblog posts in this sort of house . Exploring in Yahoo I finally stumbled upon this site. Studying this info So i am happy to convey that I have an incredibly excellent uncanny feeling I found out exactly what I needed. I such a lot undoubtedly will make sure to don?t forget this web site and provides it a glance regularly.
Grkfga # 1 week ago micardis 80mg tablet <a href="https://molnenil.com/">order hydroxychloroquine 200mg pill</a> movfor without prescription
Aodenw # 6 days ago cenforce online buy <a href="https://enapocen.shop/">naproxen 500mg ca</a> brand aralen 250mg
tmp-smx à acheter en pharmacie française # 5 days ago hey there and thank you for your information – I've definitely picked up anything new from right here. I did however expertise a few technical points using this site, as I experienced to reload the web site lots of times previous to I could get it to load correctly. I had been wondering if your web host is OK? Not that I am complaining, but sluggish loading instances times will very frequently affect your placement in google and can damage your quality score if ads and marketing with Adwords. Well I am adding this RSS to my email and can look out for much more of your respective intriguing content. Make sure you update this again soon.
Pzanqn # 5 hours ago brand atorvastatin 20mg <a href="https://anoronix.com/">buy norvasc 10mg online</a> buy amlodipine 5mg online cheap
Club-ul este dedicat membrilor si ofera access la mai multe zone ale website-ului.
Login Register

🔖 Bookmarks
✨ Pentru a sustine aceasta comunitate am sa te rog sa te autentifici sau sa te inregistrezi!

🌪️ Discord
Back to top
Folosim cookie-uri pentru a oferi functionalitatile critice ale aplicatiei Invata-Programare. Folosim cookie-uri si pentru a analiza traficul, pentru care e nevoie de consimtamantul dvs. explicit.