Wenn ich ein neues M2-Projekt starte, muss ich zuerst den Core über Composer installieren:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition
Ich kann jetzt meine benutzerdefinierten Module und Themen unter schreiben app/code
. Ich würde dann meinen composer.*
und den gesamten app/code
Ordner zu meinem VCS hinzufügen . Soweit ist alles in Ordnung.
Angenommen, ich möchte jetzt einige Build-Tools für mein Projekt verwenden, beispielsweise Grunt oder Gulp.
Wenn ich meine eigene festschreibe
Gruntfile.js
, wird diese durch dasmagento/magento2-base
Paket überschrieben , wenn ichcomposer install
nach dem Klonen des Repos starte.Wenn ich mein festschreibe
gulpfile.js
, kann ich meine Abhängigkeiten in a nicht wirklich definierenpackage.json
, da es auch von überschrieben würdemagento/magento2-base
.Wenn ich mich für das Grunt-Setup von Magento entscheide und es anpassen möchte, indem ich die Dateien unter
/dev/tools/grunt
(z. B.themes.js
) bearbeite , kann ich das nicht, da meine Änderungen von überschrieben würdenmagento/magento2-base
.
Meines Wissens nach können Sie in Ihrem Dokumentenstamm nicht wirklich viel tun. Es gibt natürlich viele Lösungen für dieses Problem:
- Ich könnte
git checkout -
direkt nach der Installation eine ausführen , um meine eigenen Dateien zurückzusetzen - Ich konnte meine Build - Dateien in einem speziellen Ordner speichern
/build
zum Beispiel - Ich könnte ein anderes Build-Tool wie Phing, Ant oder Rake verwenden (meine Frontend-Entwickler wären allerdings nicht so glücklich)
- Ich könnte
magento/magento2-base
mit einem benutzerdefinierten Paket ersetzen , das eine benutzerdefinierte Zuordnung für Kerndateien hat (nicht wirklich optimal, aber hey, es ist eine Option)
Ich persönlich mag all diese Optionen nicht, daher würde ich gerne wissen, ob es einen bevorzugten oder besseren Weg gibt, um das zu erreichen, was ich versuche.
Hat jemand das gleiche Problem? Wie hast du das gelöst? Wie strukturieren Sie Ihr Projekt unter VCS?
AKTUALISIEREN
Ein zusätzlicher Punkt im Zusammenhang mit der Projekteinrichtung. In meinen Experimenten habe ich festgestellt, dass der Magento Composer Installer ein Flag zum Überschreiben von Dateien hat:
"extra": {
"magento-force": "override"
}
Es wird intern als boolescher Wert behandelt, wenn ich mich nicht irre. Deshalb habe ich versucht, ihn so einzustellen, dass das false
Überschreiben übersprungen wird. Beim Ausführen composer install
schlägt meine Installation fehl, da die Datei (en) bereits vorhanden sind. Grundsätzlich kann ich Magento nicht installieren, wenn ich meine Dateien nicht überschreiben lasse.
Was ist dann der Zweck dieser Flagge? Soll ich nur eine Überprüfung für mich durchführen? Um ehrlich zu sein, macht es für mich wenig Sinn, aber vielleicht kann jemand etwas Licht in das Thema bringen.
quelle
Gruntfile.js
,gulpfile.js
undpackage.json
ist Problem gelöst. Das Problem adressiert in dieser Frage ist nach wie vor für neuere Magento 2 Versionen , wenn Sie ändern müssenthemes.js
,index.php
oder.htaccess
zum Beispiel.Antworten:
Kurzfristig versuchen wir, Dateien zu trennen, die angepasst werden müssen. Wenn beispielsweise die Datei index.php geändert werden muss, sollten Sie herausfinden, wie Sie die Standarddatei, die Magento enthält, von der Notwendigkeit lokaler Anpassungen trennen können. Sobald dies erreicht ist, ist es möglich, einen "einen wahren .gitignore für alle Projekte zu verwenden". Das heißt, es ist einfach, Git das gesamte Projektverzeichnis mit .gitignore von allem zuzuweisen, was "composer install" für Sie abruft (und alles, was "composer update" bei der Installation eines Patches oder Upgrades ersetzt).
Langfristig ist das Ziel, .gitignore so weit wie möglich zu verkürzen. ZB mehr in Module unter dem "Vendor" -Verzeichnis.
Dann
Auf diese Weise können Sie immer noch den gesamten Projektbaum von oben nach unten festschreiben und die Dateien composer.json und composer.lock erfassen (das Festschreiben von nur App / Code funktioniert nicht). Der .gitignore schließt das Herstellerverzeichnis und andere nicht gewünschte Dateien aus.
Dies gibt Ihnen das Beste aus beiden Welten, die in der anderen Diskussion erwähnt wurden. Der aktuelle Schmerz ist die Länge und Komplexität der .gitignore-Datei, und die Patch-Installation löscht derzeit einige lokale Anpassungen (z. B. in index.php). Kurzfristige Problemumgehung: Entfernen Sie index.php aus .gitignore. Wenn Sie einen Patch installieren, überprüfen Sie, welche Änderungen Sie verloren haben (git diff), und wenden Sie sie manuell erneut an.
quelle
"magento-force": "override"
Flagge irgendwie nützlich sein könnte. Im Moment tut es nicht genau das, was ich erwarten würde. Falls Sie Ihreindex.php
oder andere "Kern" -Dateien bearbeitet / erweitert haben , können Sie Magento einfach anweisen, Ihre Änderungen nicht zu überschreiben. Macht es irgendeinen Sinn?Es gibt eine einfache Lösung für Ihr Überschreibungsproblem: Ändern Sie keine Kerndateien;) Magento basiert darauf, den Code zu erweitern und nicht zu ändern.
Als Erstes sollten Sie nicht Ihren gesamten App- / Code-Ordner in einem vcs-Repository ablegen. Jede Magento-Komponente (Modul, Thema usw.) sollte selbst ein Repository sein.
Wenn Sie das Frontend ändern / erweitern möchten, sollten Sie ein neues Thema erstellen und dieses Thema als Ihr Hauptprojekt behandeln, nicht die gesamte Magento2-Instanz.
Um Ihr Design in Ihrem Projekt zu installieren, können Sie es einfach über Composer direkt aus Ihrem vcs-Repository herunterladen
quelle
app/code
Ordner ist speziell dazu da, Magento anzupassen. Ich verstehe das aktuelle M2 so, dass es dasapp/code
ersetzt, wasapp/code/local
es in M1 gab, und Community-Module können über Composer unter installiert werdenvendor
. Wir haben einige Projekte mit einer GROSSEN Anzahl von Modulen und auch mehrere Themen. Was Sie vorschlagen, wäre unmöglich zu verwalten.composer update
. Wo legen Sie Ihrcomposer.lock
dann fest? Wenn mehr als 10 Entwickler an demselben Projekt arbeiten, kann es sehr chaotisch werden. Natürlich haben wir viele allgemeine Module (und sogar Themes), die wir über Composer installieren, aber aus Gründen der Übersichtlichkeit sollte projektspezifischer Code unter demselben Repo versioniert werden.git blame
oder verwenden,git log
wenn der Code in mehrere Komponenten verteilt ist? Führen Sie Integrationstests durch, um sicherzustellen, dass alles einwandfrei funktioniert?Es sieht so aus, als hätte ich eine bessere Lösung für das gefunden, was ich erreichen wollte. In
composer.json
können Sie festlegen, welche Dateien vom Magento Composer-Installationsprogramm ignoriert werden sollen. Wenn ich nicht möchte, dass meinGruntfile.js
Name überschrieben wird, kann ich ihn einfach mit der folgenden Konfiguration angeben:Ich bin jetzt in der Lage, die Standardinstallation an meine Bedürfnisse anzupassen.
quelle
Leider funktioniert die akzeptierte Antwort, obwohl sie ursprünglich dazu gedacht war, das gewünschte Ziel zu erreichen, nur zum Ausschließen von Dateien und Verzeichnissen, die sich im Stammverzeichnis befinden, denn wenn wir eine Datei ausschließen möchten, die sich in einem Unterverzeichnis befindet (z. B.
dev/tools/grunt/configs/themes.js
erforderlich, wenn wir ein hinzufügen) Wenn Sie ein neues Thema erstellen und Magento Grunt-Tasks verwenden möchten, blockiert es in der Konfiguration "magento-deploy-ignore" die Bereitstellung aller übergeordneten Verzeichnisse (d. h. dev und aller seiner Unterverzeichnisse).Dies liegt daran, dass die Methode, die "magento-deploy-ignore" (
\MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored
) verwendetstrpos
, um den Zielpfad mit der Liste der ausgeschlossenen Pfade abzugleichen , so dass jeder übergeordnete Pfad immer true zurückgibt .quelle
Patches verwenden
Was ich benutze, ist das Erstellen und Anwenden von Patches. Wenn wir etwas ändern
dev/tools/grunt/configs/themes.js
müssenindex.php
oder.htaccess
die Änderungen auf eine temporäre Kopie der Datei anwenden und daraus einen Patch erstellen (erst einbuild/
Verzeichnis erstellen ):Dann können wir diesen Patch automatisch anwenden lassen, wenn wir ihn ausführen
composer install
oderupdate
indem wir demscripts
Abschnitt Ihrercomposer.json
Datei die folgenden Befehle hinzufügen :(Sie können den obigen
patch ...
Befehl auch in ein Bash-Skript einfügen. Nehmen wir an, Siebuild/themes_patch.sh
rufen das Skript in Composer auf, damit es wiederverwendbar oder manuell ausführbar ist.)Upgrade sicher! : D
Diese Lösung ist upgrade-sicher! Sie ändern Core-Dateien nicht direkt, ohne die Originaldatei zu beachten. Sie wenden einen Patch auf die ursprüngliche Magento2-Datei an. Wenn sich diese Datei aufgrund eines Upgrades ändert, schlägt der Patch fehl und Sie müssen sich die neuen Änderungen genauer ansehen und einen neuen Patch erstellen.
quelle