Pe un proiect React Native + Expo cu 40+ native modules, build-urile EAS ajungeau la 18 minute. După câteva optimizări, le-am tăiat la 7. Iată ce am schimbat:
1. resource_class corect
Default-ul Expo alege un tier mic. Pe proiecte medii-mari, urci la m-medium sau m-large:
// eas.json
{
"build": {
"production": {
"resourceClass": "m-medium",
...
}
}
}
Costul diferenței e ~30% mai mare, dar build-ul e de 2x mai rapid — în clasa de credite EAS, ieși pe plus.
2. Dependency pinning corect
package-lock.json + package.json trebuie să fie exact în sync. Dacă ai versiuni ^ și lock-ul diverge, EAS reinstalează tot de la 0.
- Folosește
npm cilocal înainte să push-uiești - Commit-uiește lock-ul mereu
- Dependabot poate auto-actualiza în mod ordonat
3. Exclude folderele mari din upload
EAS urcă tot proiectul la server. Adaugi în .easignore:
node_modules
.git
coverage
cypress
*.log
ios/Pods
android/.gradle
La un proiect cu video assets am dat peste 500MB economie → upload de la 4 min la 20 sec.
4. Prebuild caching
Dacă ai expo prebuild în workflow, output-ul (folderele ios/ și android/) poate fi committed sau re-generat per build. A doua opțiune e mai curată, dar costă timp.
Varianta hibridă:
- Commit-uiești
ios/șiandroid/ - Rulezi
expo prebuild --cleandoar când upgrade-zi Expo SDK
Câștigi 3-5 minute per build pe proiectele mari.
Bonus: developer build o dată pe săptămână
Dacă echipa folosește developer build-uri, programează un build automat dimineața. Developer-ii au deja binary-ul când vin la muncă, zero așteptare.
Monitoring
EAS dashboard arată timpul per step. Uită-te la install dependencies (>3 min = problemă) și compile native code (>5 min = probabil resource_class mic).
Rezultat final
Pe un proiect real:
- Înainte: 18 min, 1 credit
- După: 7 min, 1.3 credite
- Developer satisfaction: cu mult mai bună