Publicare pe Packagist cu artefacte

Am mai multe pachete publicate pe packagist (extensii pentru Carbon Fields; exemplu). Eh, iar pachetele astea au și niște componente JS care au nevoie să fie compilate.

Momentan fac asta manual, npm run build, proces prin care fișierele din assets/js/components se compilează în assets/js/bundle.js*. Eh, treaba merge ok, doar că… na, nu suntem sălbatici să facem lucrurile manual, nu?

De unde apare problema: cum pot exclude fișierele din git DAR să fie compilate cumva, astfel încât la composer install să fie disponibile? Mă gândeam la un task CI în care păstrez compilatele (artefacte) dar nu știu cum aș putea aborda problema.

Ceva sugestii?

O altă abordare ar fi să publici un npm package separat cu componentele js. Mi se pare un pic ciudat să importi in .js chestii in vendor/my-package

Altă solutie nu prea văd, deâct sa incluzi bundle.js în pachet.

1 Like

Deh, WordPress :smiley:

Nici nu poti lasa bundleuirea pe mana celui care instaleaza pachetul, pot sa fie probleme de orice fel acolo din cauza environmentului.

O metoda semi-automatizata ar fi pe baza de git hooks. Noi folosim husky si e destul de ok.

Chestia asta presupune rularea locală, iar eu aș vrea să evit treaba asta.

De exemplu, dacă am de făcut o schimbare minoră, aș vrea să pot face asta direct în github, să se compileze JS și să se propage apoi în Composer/Packagist.

Daca packagist nu ofera vreo posibilitate de rulare a npm script (si nu mi s-ar parea normal sa ofere, imho), nu prea vad cum ar fi posibil :slight_smile: De asemenea, indiferent de cat de mica e modificarea, ar trebui sa fie prezent si versioning. De unde ar sti composer care ar fi numarul noii versiuni?

De bine de rau, daca publici pachete pentru a fi folosite de altii, putina munca manuala pentru a garanta calitatea pachetelor e necesara. Parerea mea.

1 Like

Nu vad licenta in repo, dar presupun ca ai uitat

Yup! CI/CD Abuzeaza de travis-ci
https://docs.travis-ci.com/user/job-lifecycle#complex-build-commands

if: type = pull_request
script:
  - npx webpack

build it. commit it.

after_success:
  - postbuild.sh

merge it. tag it

Problema e că e manual sau că ai fișiere compilate in git?

Nu greșești însă cu un script de compile care poate fi rulat și manual și de pe un server CI. Serverul CI poate face push dupaia la package repo. Outputul lui ar fi ce e inclus in pachetul tau, și nu neapărat ce se afla in rădăcina git repo.

Problema e că am fișiere compilate în git. Experiența m-a învățat că asta e o idee proastă aproape de fiecare dată, pentru că la fiecare merge cresc șansele de conflicte :slight_smile:

@ct27stf: zici tu? :slight_smile:

1 Like

Ah. Pana me … ma uitam la github ca nu gasise LICENSE file

Nu ți fii frică. Bagă acolo.
faci un .gitattributes si zici

assets/js/bundle.js merge=ours

si cand e conflict o sa suprascrie destinatia

1 Like

E discutabil, mai ales cand si aia mai mari o fac.

1 Like

In caxul asta Vue o fsce pt a folosi github pe post de cdn.
Si nu-s chiar asa mari :wink: