Alcony

Otwarta Społeczność

DevOps

Jak łatać pakiety Composer własnym kodem

Composer jest popularnym narzędziem do zarządzania zależnościami w projektach PHP. Pozwala na instalowanie i aktualizowanie pakietów z różnych źródeł, takich jak Packagist, GitHub lub własne repozytoria. Jednak czasami może być potrzeba zmodyfikowania kodu pakietu, aby naprawić błąd, dodać funkcję lub dostosować go do własnych potrzeb. Jak to zrobić bez naruszania funkcjonalności Composer lub utraty zmian przy aktualizacji pakietu?

Jedną z opcji jest utworzenie forka repozytorium pakietu, wprowadzenie tam zmian i następnie użycie forka jako źródła pakietu w pliku composer.json. W ten sposób można śledzić zmiany i łączyć je z aktualizacjami z góry. Jednak to podejście ma kilka wad:

  • Trzeba utrzymywać własny fork pakietu, co może być czasochłonne i nużące.
  • Trzeba aktualizować plik composer.json za każdym razem, gdy zmienia się źródło pakietu, co może być podatne na błędy i niewygodne.
  • Może się nie chcieć dzielić zmianami publicznie lub zajmować się pull requestami i problemami na GitHubie.

Inną opcją jest użycie funkcji patch Composer, która pozwala na stosowanie własnych patchy do dowolnego pakietu po jego zainstalowaniu lub zaktualizowaniu. Patch jest plikiem, który zawiera różnice między dwiema wersjami pliku lub zestawu plików. Można tworzyć patchy za pomocą narzędzi takich jak Git lub diff. Z funkcją patch Composer, można określić listę patchy dla każdego pakietu w pliku composer.json, a Composer automatycznie je zastosuje po pobraniu pakietu. W ten sposób można zachować zmiany w własnym projekcie i uniknąć modyfikowania bezpośrednio katalogu vendor. To podejście ma kilka zalet:

  • Nie trzeba utrzymywać forka pakietu ani zmieniać jego źródła w pliku composer.json.
  • Można łatwo cofnąć lub zaktualizować patchy bez wpływu na oryginalny kod pakietu.
  • Można zachować patchy prywatnie lub dzielić się nimi wybiórczo z innymi.

Aby używać funkcji patch Composer, trzeba zainstalować plugin cweagans/composer-patches, który dodaje obsługę patchowania pakietów do Composer. Aby go zainstalować, należy uruchomić:

composer require cweagans/composer-patches

Następnie, w pliku composer.json, należy dodać sekcję o nazwie “patches” pod “extra”, gdzie można wymienić patchy dla każdego pakietu. Na przykład:

{
  "extra": {
    "patches": {
      "vendor/package": {
        "Opis patcha": "ścieżka/do/pliku/patcha.patch"
      }
    }
  }
}

Można również używać adresów URL lub ścieżek lokalnych jako źródła plików patchy. Na przykład:

{
  "extra": {
    "patches": {
      "vendor/package": {
        "Opis patcha": "https://example.com/patch/file.patch"
      }
    }
  }
}

lub

{
  "extra": {
    "patches": {
      "vendor/package": {
        "Opis patcha": "../patches/file.patch"
      }
    }
  }
}

Można również używać wildcardów, aby zastosować patchy do wielu pakietów, które pasują do wzorca. Na przykład:

{
  "extra": {
    "patches": {
      "vendor/*": {
        "Opis patcha": "ścieżka/do/pliku/patcha.patch"
      }
    }
  }
}

To zastosuje ten sam patch do wszystkich pakietów pod przestrzenią nazw vendor.

Aby zastosować patchy, należy uruchomić:

composer install

lub

composer update

Composer pobierze pakiety i następnie zastosuje patchy zgodnie z plikiem composer.json. Zobaczysz wiadomość taką jak ta:

  - Stosowanie patchy dla vendor/package
    ścieżka/do/pliku/patcha.patch (Opis patcha)

Jeśli wystąpią jakieś błędy lub konflikty podczas stosowania patchy, Composer powiadomi cię o tym i zapyta, jak postąpić. Możesz wybrać opcję pominięcia patcha, ponownego jego zastosowania lub przerwania całego procesu.

Aby cofnąć patchy, należy uruchomić:

composer install --no-patches

lub

composer update --no-patches

Composer ponownie zainstaluje lub zaktualizuje pakiety bez stosowania żadnych patchy.

Aby dowiedzieć się więcej o funkcji patch Composer, zapoznaj się z dokumentacją pluginu cweagans/composer-patches: https://github.com/cweagans/composer-patches

Mam nadzieję, że ten artykuł był pomocny i pouczający. Jeśli masz jakieś pytania lub uwagi, zostaw komentarz poniżej.

Udostępnij:

ZOSTAW ODPOWIEDŹ

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

CEO alcony.pl CEO jaksmakowalo.pl PHP Developer w Advox.pl
error

Znajdziesz nas również tutaj: