Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Composer] Wiele projektów - jeden vendor, Jak to skonfigurować poprawnie?
Tomplus
post 5.12.2018, 15:31:46
Post #1





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 147
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie wiem jak użyć jeden katalog vendor dla wielu projektów do których potrzebuję te same wersje pakietów. Jednak jedyne wyjście - najpewniejsze to inicjacja composera w katalogu projektu, ale gdy jest dużo większych bibliotek to nie ma sensu duplikowania bibliotek.

Przedstawię układ katalogów dla mojego projektu:

Kod
- \projekt
---- \vendor
---- \dev
-------- \libs
-------- composer.json
---- \public
-------- \libs
-------- composer.json


W katalogu ./dev i ./public zainicjowałem composer.json z następującymi danymi:

Kod
{
    "require": {
        "phpmailer/phpmailer": "^6.0",
        "mpdf/mpdf": "^7.1"
    },
    "autoload": {
        "psr-4": {
            "":"libs"
        }
    },
    "config": {
        "bin-dir":"libs",
        "vendor-dir": "../vendor"
    }
}


Niby działa, ale zawsze tylko dla jednego, czyli dla tego który ostatni otrzymał wywołanie: composer dump-autoload
Kod dla autoload_psr4.php mam taki:

  1. <?php
  2.  
  3. // autoload_psr4.php @generated by Composer
  4.  
  5. $vendorDir = dirname(dirname(__FILE__));
  6. $baseDir = dirname($vendorDir).'/dev';
  7.  
  8. return array(
  9. 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
  10. 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'),
  11. 'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
  12. 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
  13. '' => array($baseDir . '/libs'),
  14. );



Zmienia się jedynie wartość zmiennej $baseDir czyli albo /dev albo /public.

Czy jest jakaś recepta aby móc korzystać z wewnętrznych klas projektu osobno, a vendora wspólnie?

Ten post edytował Tomplus 5.12.2018, 16:29:10
Go to the top of the page
+Quote Post
Pyton_000
post 5.12.2018, 16:05:52
Post #2





Grupa: Zarejestrowani
Postów: 7 576
Pomógł: 1332
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Po co robisz sobie problemy? Na prawdę aż tak biedujesz transfer i sotrage?

Jak już tak chcesz to zrób

Kod
-|
   composer.json
   ./vendor
\__ dev
\_  public


Czyli composer wraz z json i lock katalog niżej i dołącz autoloader w każdym.
Dodatkowo jak chcesz miec autoloading w projektach to dodatkowo tam załóż composer jako autoload plików samego projektu.
Go to the top of the page
+Quote Post
Tomplus
post 5.12.2018, 16:35:09
Post #3





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 147
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Może nie bieduje, ale chodzi mi o pewną wygodę, i pewność że stabilne biblioteki są takie same w obydwu wersjach projektu.

W poście głównym zrobiłem korektę schematu katalogu, dopisałem tam gdzie obecnie mam pliki composer.json/lock

Ale wg Twojego zamysłu, na moich schemacie, ma być tak:
questionmark.gif

Kod
- \projekt
---- composer.json
---- \vendor
---- \dev
-------- \libs
---- \public
-------- \libs


Go to the top of the page
+Quote Post
viking
post 5.12.2018, 18:09:15
Post #4





Grupa: Zarejestrowani
Postów: 5 011
Pomógł: 846
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Przecież composer właśnie do tego służy żebyś miał wersję konkretnie jaką chcesz.


--------------------
Go to the top of the page
+Quote Post
Tomplus
post 5.12.2018, 18:13:15
Post #5





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 147
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie przeczę, dlatego chce wersję bibliotek taką samą do dwóch wersji tego samego projektu.
Go to the top of the page
+Quote Post
Pyton_000
post 5.12.2018, 19:41:31
Post #6





Grupa: Zarejestrowani
Postów: 7 576
Pomógł: 1332
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Raczej coś takiego:
Kod
o
|-- vendor
|-- composer.json
|-- dev
|   |-- vendor
|   `-- composer.json
`-- prod
    |-- vendor
    `-- composer.json

W takim układzie w `dev` załączasz 2x autoload (1-szy z root dir gdzie masz main libs, a 2-gi ze swojego katalogu)

Nie powiem Ci czy to zadziała na 100% ale powinno smile.gif
Go to the top of the page
+Quote Post
Tomplus
post 6.12.2018, 15:16:48
Post #7





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 147
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Nie udało mi się poprawnie skonfigurować. Więc po prostu zrobiłem to inaczej.

Zainstalowałem bibliotekę: https://packagist.org/packages/nette/robot-loader i wdrożyłem ją do projektu.

Teraz wszystko działa tak jak powinno.
Go to the top of the page
+Quote Post
sazian
post 8.12.2018, 14:06:21
Post #8





Grupa: Zarejestrowani
Postów: 994
Pomógł: 133
Dołączył: 19.09.2006
Skąd: B-tów

Ostrzeżenie: (0%)
-----


skoro chcesz dokładnie to samo to nie możesz zwykłego symlinka zrobić?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 11.12.2018 - 21:56