Wir hatten zwei große Krisen im Zusammenhang mit Abhängigkeiten mit zwei unterschiedlichen Codebasen (Android und eine Node.js-Web-App). Das Android-Repository musste von Flurry auf Firebase migriert werden, wodurch die Google Play Services-Bibliothek in vier Hauptversionen aktualisiert werden musste . Ähnliches geschah mit unserer von Heroku gehosteten Node-App, bei der unser Produktionsstapel (Zeder) veraltet war und auf Zeder-14 aktualisiert werden musste. Unsere PostgreSQL-Datenbank musste ebenfalls von 9.2 auf 9.6 aktualisiert werden.
Die Abhängigkeiten dieser Apps waren fast zwei Jahre lang veraltet. Als einige davon veraltet waren und wir die "Sunset" -Periode erreichten, war es ein großes Problem, sie zu aktualisieren oder zu ersetzen. Ich habe in den letzten ein oder zwei Monaten über 30 Stunden damit verbracht, alle Konflikte und den kaputten Code langsam zu lösen.
Offensichtlich ist es viel zu lang, die Dinge zwei Jahre lang stehen zu lassen. Die Technologie entwickelt sich schnell, insbesondere wenn Sie einen Plattformanbieter wie Heroku verwenden. Nehmen wir an, wir haben eine vollständige Testsuite und einen CI-Prozess wie Travis CI, der das Aktualisieren erheblich vereinfacht. Wenn beispielsweise eine Funktion nach einem Upgrade entfernt wurde und Sie sie verwendeten, schlagen Ihre Tests fehl.
Wie oft sollten Abhängigkeiten aktualisiert werden, oder wann sollten Abhängigkeiten aktualisiert werden? Wir haben aktualisiert, weil wir dazu gezwungen wurden, aber es scheint, dass eine Art präventiver Ansatz besser wäre. Sollten wir aktualisieren, wenn kleinere Versionen veröffentlicht werden? Hauptversionen? Jeden Monat, wenn Updates verfügbar sind? Ich möchte eine Situation wie die, die ich gerade erlebt habe, um jeden Preis vermeiden.
PS - für eines meiner persönlichen Rails-Projekte verwende ich einen Dienst namens Gemnasium, der Ihre Abhängigkeiten aufzeichnet , damit Sie beispielsweise über Sicherheitslücken informiert werden können. Es ist ein großartiger Service, aber wir müssten die Abhängigkeiten für die von mir erwähnten Projekte manuell überprüfen.