Comment étendre la configuration par défaut de Magento 2 Grunt sans toucher / éditer les fichiers principaux comme Gruntfile.js
et dev/tools/grunt/configs/themes.js
?
Créer un nouveau thème pour Magento 2 pourrait être un défi, même si vous aviez déjà utilisé Magento. Les développeurs décents ne changeraient pas les fichiers principaux de Magento, mais créeraient plutôt des "wrappers", donc à l'avenir, l'installation de correctifs et la mise à jour ne vous permettront pas de remplacer toutes vos modifications ou de les fusionner incorrectement.
Étendre les fichiers Gruntfile.js et themes.js
Supposons que vous ayez créé un nouveau thème et comme nous le savons dans la documentation des documents Magento 2, vous devrez modifier le fichier en dev/tools/grunt/configs/themes.js
ajoutant votre thème à la liste, afin que Grunt puisse compiler / créer un lien symbolique / copier des fichiers CSS / moins dans le pub/static
dossier.
Étape 1: créer un /dev/tools/grunt/configs/themes.yourthemename.js
fichier qui étend le themes.js
fichier par défaut en tant que
'use strict';
var defaultThemes = require('./themes'),
_ = require('underscore');
var yourTheme = {
yourthemename: {
area: 'frontend',
name: '<vendor>/<yourthemename>',
locale: 'en_US',
files: [
'css/main',
],
dsl: 'less'
}
};
module.exports = _.extend(defaultThemes, yourTheme);
Étape 2: étendre Gruntfile.js
avec un fichierGruntfile.yourthemename.js
'use strict';
var defaultGruntfile = require('./Gruntfile'),
_ = require('underscore');
var yourthemeGruntfile = {};
yourthemeGruntfile.themes = require('./dev/tools/grunt/configs/themes.yourthemename');
module.exports = _.extend(defaultGruntfile, yourthemeGruntfile);
Étape 3: Maintenant, vous pouvez exécuter des tâches Grunt pour votre thème comme:
grunt --gruntfile=Gruntfile.yourthemename.js clean:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js exec:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js less:yourthemename
grunt --gruntfile=Gruntfile.yourthemename.js watch:yourthemename
exec:yourthemename
, obtenez-vousWarning: Required config property "clean.yourthemename" missing. Used --force, continuing.
?? C'est étrange, je suis capable de nettoyer mon thème avec laclean:yourthemename
commande, mais je pense que laexec
commande devrait le faire sans erreur.dev/tools/grunt/configs
effectuent unrequire('./themes')
, des exemples sontclean.js
et à l'exec.js
intérieur de ce répertoire de configuration. Ce qui m'amène à croire que ces fichiers manqueront alors de notre thème nouvellement ajoutéthemes.yourthemename.js
. Pourtant, cette configuration fonctionne, je ne peux tout simplement pas déterminer la cause de monRequired config property "clean.yourthemename" missing.
erreur ...Lorsque la solution de Jev Mokrousov ne vous convient pas, vous pouvez essayer deux alternatives:
Commande de post-installation du compositeur
Pendant l'installation du
magento/magento2-base
package, le fichierGruntfile.js
et le dossierdev/tools
seront copiés du package dans votre dossier racine en écrasant tous les fichiers existants, causés par le mappage de base Magento2composer.json
(voirvendor/magento/magento2-base/composer.json
dans votre projet):Vous pouvez placer vos versions de
Gruntfile.js
etdev/tools/grunt/configs/themes.js
quelque part (nous les avons mises dans notre structure de répertoire de constructionbuild/tools/grunt/
).Il est désormais possible d'ajouter des commandes ou des scripts supplémentaires avant ou après certains événements Composer. Nous pourrions nous accrocher à l'
post-install-cmd
événement Composer pour copier nos versions de ces fichiers sur celles de base de Magento. Vous devez l'ajouter à votre projetcomposer.json
:Cela vous montrera:
Thème en tant que module Compositeur
Tout comme le
magento/magento2-base
package mappe des fichiers dans la racine du projet (comme décrit ci-dessus), vous pouvez également le faire vous-même.Vous pouvez placer votre thème dans un package Composer distinct. Vous devrez créer un référentiel séparé pour cela. Les documents Magento décrivent déjà ce processus: voir "Faire de votre thème un package Composer"
Ajoutez maintenant ceci dans le
composer.json
fichier de votre thème :Assurez-vous que le premier chemin pointe vers le bon emplacement dans votre package de thème. Les chemins sont relatifs depuis l'emplacement du
composer.json
fichier du thème .Avertissement: les
deux solutions remplacent les fichiers principaux. Cela peut entraîner des problèmes de correctif ou de mise à niveau. Lors du correctif et de la mise à niveau, vous devez toujours vérifier ce qui va être modifié et appliquer ces modifications sur vos copies de ces fichiers de base.
la source
Comme je suis sûr que beaucoup de gens se retrouveront à étendre un thème parent plutôt que de construire complètement un thème à partir de zéro, voici une syntaxe légèrement différente offerte pour votre
themes.yourThemeName.js
fichier. Plutôt que de définir complètement à partir de zéro la configuration de notre thème, nous l'héritons du parent, puis ajoutons / modifions ce qui est nouveau / différent.Dans cet exemple, nous héritons de la configuration de blank, définissons le nom de notre thème et ajoutons les fichiers racine supplémentaires de notre thème. Un avantage à cela est que vous n'avez pas à déclarer spécifiquement tous les fichiers du thème parent. Pour les personnes étendant un thème parent qui reçoit des mises à jour périodiquement, cela pourrait être bénéfique. (L'utilisation du blanc comme exemple de scénario ici n'est probablement pas la situation la plus applicable, mais ce sont les concepts appliqués ici qui importent).
la source