Lorsque je démarre un nouveau projet M2, la première chose que je ferais est d'installer le core via composer:
composer create-project --repository-url=https://repo.magento.com/ magento/project-community-edition
Je peux maintenant écrire mes modules et thèmes personnalisés sous app/code
. J'ajouterais alors mon composer.*
et le app/code
dossier entier à mon VCS. Jusqu'à présent, tout va bien.
Supposons maintenant que je veuille utiliser des outils de construction pour mon projet, disons Grunt ou Gulp.
Si je valide le mien
Gruntfile.js
, ce sera écrasé par lemagento/magento2-base
package lorsque j'exécuteraicomposer install
après avoir cloné le dépôt.Si je valide mon
gulpfile.js
, je ne peux pas vraiment définir mes dépendances dans apackage.json
, car il serait également écrasé parmagento/magento2-base
.Si je décide d'utiliser la configuration de Magento Grunt et que je souhaite la personnaliser en modifiant les fichiers sous
/dev/tools/grunt
(par exemplethemes.js
), je ne peux pas car mes modifications seraient écrasées parmagento/magento2-base
.
Je crois comprendre que vous ne pouvez pas vraiment faire grand-chose dans la racine de votre document. Il existe bien sûr de nombreuses solutions à ce problème:
- Je pourrais exécuter un
git checkout -
droit après l'installation pour réinitialiser mes propres fichiers - Je pourrais stocker mes fichiers de construction dans un dossier dédié,
/build
par exemple - Je pourrais utiliser un outil de construction différent, comme Phing, Ant ou Rake (mes développeurs frontaux ne seraient pas si heureux cependant)
- Je pourrais remplacer
magento/magento2-base
par un package personnalisé qui a un mappage personnalisé pour les fichiers de base (pas vraiment optimal mais bon, c'est une option)
Personnellement, je n'aime pas toutes ces options, je voudrais donc savoir s'il existe une façon préférée ou meilleure de réaliser ce que j'essaie de faire.
Quelqu'un a-t-il le même problème? Comment l'avez-vous résolu? Comment structurez-vous votre projet sous VCS?
MISE À JOUR
Un point supplémentaire lié à la configuration du projet. Dans mes expériences, j'ai remarqué que le programme d'installation de Magento composer a un indicateur pour remplacer le fichier:
"extra": {
"magento-force": "override"
}
Il est traité en interne comme un booléen si je ne me trompe pas, j'ai donc essayé de le régler false
pour ignorer la substitution. Lorsque j'exécute, composer install
mon installation échoue car le ou les fichiers sont déjà présents. Fondamentalement, si je ne laisse pas Magento remplacer mes fichiers, je ne peux pas l'installer.
Quel est le but de ce drapeau alors? Est-ce seulement supposé effectuer un contrôle pour moi? Pour être honnête, cela n'a pas beaucoup de sens, mais peut-être que quelqu'un peut faire la lumière sur le sujet.
Gruntfile.js
,gulpfile.js
etpackage.json
problème est résolu. Le problème abordé dans cette question est toujours applicable aux nouvelles versions de Magento 2 lorsque vous devez changerthemes.js
,index.php
ou.htaccess
par exemple.Réponses:
À court terme, nous cherchons à séparer les fichiers qui nécessitent une personnalisation. Par exemple, si les gens ont besoin de modifier index.php, découvrez comment séparer le fichier standard livré par Magento du besoin de personnalisations locales. Une fois atteint, il est possible d'avoir "un seul vrai .gitignore pour tous les projets utilisables". Autrement dit, il est facile de valider tout le répertoire du projet dans Git avec .gitignore de tout ce que "installer le compositeur" récupérera pour vous (et tout ce que "la mise à jour du compositeur" remplacera lors de l'installation d'un correctif ou d'une mise à niveau).
A plus long terme, l'objectif est de raccourcir autant que possible le .gitignore. Par exemple, pousser plus dans les modules sous le répertoire «vendeur».
alors
De cette façon, vous pouvez toujours git valider la totalité de l'arborescence du projet de haut en bas, capturant les fichiers composer.json et composer.lock (la validation uniquement de l'application / du code ne le fait pas). Le .gitignore exclura le répertoire «vendeur» et les autres fichiers non souhaités.
Cela vous donne le meilleur des deux mondes mentionnés dans l'autre discussion. La difficulté actuelle est la longueur et la complexité du fichier .gitignore, et l'installation des correctifs efface actuellement certaines personnalisations locales (par exemple dans index.php). Solution de contournement à court terme - supprimez index.php de .gitignore, et lorsque vous installez un correctif, vérifiez les modifications que vous avez perdues (git diff) et réappliquez-les manuellement.
la source
"magento-force": "override"
drapeau pourrait être utile d'une manière ou d'une autre. Pour le moment, il ne fait pas exactement ce à quoi je m'attendais. Dans le cas où vous avez modifié / étendu votreindex.php
ou tout autre fichier "de base", vous pouvez simplement dire à Magento de ne pas écraser vos modifications. Celà a-t-il un sens?Il existe une solution simple pour votre problème prioritaire: ne changez pas les fichiers principaux;) Magento est basé sur l'extension du code et non sur sa modification.
La première chose est que vous ne devez pas mettre l'intégralité de votre dossier d'application / de code dans un référentiel vcs. Chaque composant Magento (module, thème, etc ...) devrait être un référentiel lui-même.
Si vous souhaitez modifier / étendre le frontend, vous devez créer un nouveau thème et traiter ce thème comme votre projet de grognement, pas l'ensemble de l'instance Magento2.
Pour installer votre thème dans votre projet, vous pouvez facilement le récupérer via le composeur directement depuis votre référentiel vcs
la source
app/code
dossier est spécifiquement là pour personnaliser Magento. Ma compréhension du M2 actuel est qu'ilapp/code
remplace ce quiapp/code/local
était dans M1, et les modules de communauté peuvent être installés via composer sousvendor
. Nous avons quelques projets avec un GRAND nombre de modules et plusieurs thèmes également. Ce que vous proposez serait impossible à gérer.composer update
. Où engagez-vous votrecomposer.lock
alors? Si plus de 10 développeurs travaillent sur le même projet, cela pourrait s'avérer très compliqué. Bien sûr, nous avons beaucoup de modules généraux (et même de thèmes) que nous installons via Composer, mais le code spécifique au projet doit être versionné sous le même référentiel pour plus de clarté.git blame
ougit log
lorsque le code est dispersé dans plusieurs composants? Exécutez-vous des tests d'intégration pour vérifier que tout fonctionne correctement?Ok, on dirait que j'ai trouvé une meilleure solution pour ce que j'essayais de réaliser. Dans le
composer.json
, il est possible de spécifier quels fichiers doivent être ignorés par le programme d'installation de Magento Composer. Si je ne veux pas que mon nomGruntfile.js
soit remplacé, je peux simplement le spécifier avec la configuration suivante:Je suis maintenant en mesure d'étendre l'installation standard pour répondre à mes besoins.
la source
Malheureusement, la réponse acceptée, bien qu'elle soit à l'origine destinée à atteindre l'objectif souhaité, ne fonctionne que pour exclure les fichiers et répertoires placés à la racine, car si nous voulons exclure un fichier placé dans un sous-répertoire (par exemple
dev/tools/grunt/configs/themes.js
, si nous ajoutons un nouveau thème et souhaitez utiliser les tâches Magento Grunt), en le plaçant dans la configuration "magento-deploy-ignore", il bloque le déploiement de tous les répertoires parents (c'est-à-dire, dev et tous ses sous-répertoires).Cela se produit car la méthode qui traite le "magento-deploy-ignore" (
\MagentoHackathon\Composer\Magento\Deploystrategy\DeploystrategyAbstract::isDestinationIgnored
) utilisestrpos
pour faire correspondre le chemin de destination à la liste des exclus, donc chaque chemin parent retournera toujours vrai.la source
Utilisation de correctifs
Ce que j'utilise, c'est créer et appliquer des correctifs. Lorsque nous devons changer
dev/tools/grunt/configs/themes.js
,index.php
ou.htaccess
appliquer les modifications à une copie temporaire du fichier et en créer un patch (créez d'abord unbuild/
répertoire):Ensuite, nous pouvons appliquer ce correctif automatiquement lors de l'exécution
composer install
ouupdate
en ajoutant des commandes te à lascripts
section de votrecomposer.json
fichier:(Vous pouvez également placer la
patch ...
commande ci-dessus dans un script bash, disonsbuild/themes_patch.sh
et appeler ce script depuis Composer pour qu'il soit réutilisable ou exécutable manuellement)Mettez à niveau en toute sécurité! :RÉ
Cette solution est mise à niveau en toute sécurité! Vous ne modifiez pas directement les fichiers principaux sans respecter le fichier d'origine. Vous appliquez un correctif au fichier Magento2 d'origine. Lorsque ce fichier change parce que vous effectuez une mise à niveau, le correctif échoue et vous savez que vous devez examiner de plus près les nouvelles modifications et créer un nouveau correctif.
la source