Wie kann man mehrere "Feature" -Reaktions-Apps in monolithisches PHP-Repo integrieren?


7

Wir haben ein Mono-Laravel-Repo und sind dabei, auf einen saubereren, einfacher zu wartenden Dev-Neustart zu migrieren.

Wir sind kürzlich dazu übergegangen, unsere vorhandenen PHP-basierten Ansichten in mehrere reaktionsbasierte "Funktionen" zu migrieren, die sich in einem /reactVerzeichnis befinden und in /react/featureNameUnterverzeichnissen organisiert sind . Dies bedeutet, dass die Controller von Laravel hauptsächlich nur Daten und Authentifizierung verarbeiten.

Jede Funktion wird von einem oder mehreren Entwicklern verwaltet und hat ihre eigenen Abhängigkeiten, Tests und Funktionen.

Derzeit stellen wir Builds im öffentlichen Stamm unseres Projekts bereit, die nach Funktionen organisiert sind:

js/FeatureName.hashed.js
css/FeatureName.hased.css

Das funktioniert großartig, außer dass wir viele Pakete miteinander teilen features. Reagieren Sie selbst, reagieren Sie Router usw.

Wir beabsichtigen, Laravel mix.jsso oft wie möglich zu verwenden, aber auch direktes Hacken webpack.configist eine Option.

Ich habe die mix.extract()Option untersucht, mit der wir die Builds von vendor.js getrennt von anderer Anwendungslogik definieren können, aber sie hört dort auf.

Also hier sind meine Frage (n)

  1. Welche Ansätze gibt es, um mehrere package.jsonDateien zu verwalten , die in jedem Feature-Verzeichnis gespeichert sind?
  2. Wie identifizieren wir gängige Pakete und sperren sie in eine Root- /package.jsonDatei? (Unabhängig davon verwenden bereits alle Entwickler yarn)
  3. Wie kann dies für alle reaktionsbasierten Entwickler so reibungslos wie möglich erreicht werden, damit sie einfach mit dem fortfahren können, was sie bereits tun, und DevOps die schwierigen Aufgaben erledigt?

Ich verstehe, dass möglicherweise weitere Informationen erforderlich sind. Bitte geben Sie in den Kommentaren an, was Sie benötigen, und ich würde die Frage gerne aktualisieren.


Ich würde vorschlagen, die wichtigste Frage in diesem Beitrag beizubehalten und die anderen in separaten Beiträgen zu stellen und schließlich auf diesen Beitrag zu verweisen, um die Details nicht zu wiederholen.
Dan Cornilescu

Ich würde auch vorschlagen, den "besten Weg" in die Frage zu streichen - dadurch wird die Frage meinungsbasiert, was verpönt ist. Wie wäre es, es durch nur "Wie" zu ersetzen? Wenn Sie mehrere Antworten erhalten, gibt die Anzahl der Stimmen an, welche am beliebtesten ist. Sie geben an, welche für Sie am besten geeignet ist, indem Sie eine davon akzeptieren.
Dan Cornilescu

Antworten:


2
  1. Welche Ansätze gibt es, um mehrere package.json-Dateien zu verwalten, die in jedem Feature-Verzeichnis gespeichert sind?

Man könnte die package.json in jedem Feature-Verzeichnis belassen und das CI beim Erstellen der App die package.json lesen lassen. Man könnte die Versionen von Abhängigkeiten in der package.json definieren, um die Kontrolle über die App zu erhalten. Wenn die App mit der Version ABC einer bestimmten Bibliothek funktioniert, kann diese Version definiert werden, um zu verhindern, dass ein Update die App beschädigt.

  1. Wie identifizieren wir gängige Pakete und sperren sie in eine root / package.json-Datei? (Unabhängig davon verwenden alle Entwickler bereits Garn)

Besprechen Sie dies mit dem Team und finden Sie heraus, welche Lösung für alle die beste ist. Es sind mehrere Lösungen möglich. Jeder sollte mit einem bestimmten Ansatz zufrieden sein.

  1. Wie kann dies für alle reaktionsbasierten Entwickler so reibungslos wie möglich erreicht werden, damit sie einfach mit dem fortfahren können, was sie bereits tun, und DevOps die schwierigen Aufgaben erledigt?

DevOps bedeutet meiner Meinung nach, dass ein bestimmtes Team, das aus mehreren Spezialitäten besteht, z. B. test, dev, ops, für eine bestimmte App verantwortlich ist. Dies bedeutet, dass das gesamte Team einem bestimmten Ansatz zustimmen sollte und jeder nach diesem Prozess arbeiten und Probleme behandeln sollte, anstatt DevOps handles the gritty bitssich um Silos zu kümmern und sie "über die Mauer zu werfen".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.