¿Cómo extender la configuración predeterminada de Magento 2 Grunt sin tocar / editar archivos principales como Gruntfile.jsy dev/tools/grunt/configs/themes.js?
Crear un nuevo tema para Magento 2 podría ser un desafío, incluso tener experiencia con Magento antes. Los desarrolladores decentes no cambiarían los archivos principales de Magento, sino que crearían "envoltorios" en su lugar, por lo que en el futuro al instalar parches y realizar actualizaciones, no tendrá una situación en la que todos sus cambios se anulen o se fusionen incorrectamente.
Extienda archivos Gruntfile.js y themes.js
Supongamos que creó un nuevo tema y, como sabemos por la documentación de los documentos de Magento 2 , deberá cambiar el archivo dev/tools/grunt/configs/themes.jsagregando su tema a la lista, para que Grunt pueda compilar / vincular / copiar / css / menos archivos en la pub/staticcarpeta.
Paso 1: crear un /dev/tools/grunt/configs/themes.yourthemename.jsarchivo que amplíe el themes.jsarchivo predeterminado como
'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);
Paso 2: Ampliar Gruntfile.jscon archivoGruntfile.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);
Paso 3: Ahora puedes ejecutar tareas de Grunt para tu tema como:
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:yourthemenamete saleWarning: Required config property "clean.yourthemename" missing. Used --force, continuing.?? Es extraño que pueda limpiar mi tema con elclean:yourthemenamecomando, pero creo que elexeccomando debería hacerlo sin error.dev/tools/grunt/configsrealizan unrequire('./themes')ejemplo,clean.jsyexec.jsdentro de ese directorio de configuración. Lo que me lleva a creer que a estos archivos les faltará nuestro tema recién agregadothemes.yourthemename.js. Aún así, esta configuración funciona, simplemente no puedo determinar la causa de miRequired config property "clean.yourthemename" missing.error ...Cuando la solución de Jev Mokrousov no le queda bien, hay dos alternativas que puede probar:
Comando de instalación posterior del compositor
Durante la instalación del
magento/magento2-basepaquete, el archivoGruntfile.jsy la carpetadev/toolsse copiarán del paquete en su carpeta raíz sobrescribiendo los archivos existentes, causados por la asignación base de Magento2composer.json(consultevendor/magento/magento2-base/composer.jsonen su proyecto):Puede colocar sus versiones de
Gruntfile.jsy endev/tools/grunt/configs/themes.jsalgún lugar (las hemos colocado dentro de nuestra estructura de directorios de compilaciónbuild/tools/grunt/).Ahora existe la posibilidad de agregar comandos o scripts adicionales antes o después de ciertos eventos de Composer. Podríamos conectarnos al
post-install-cmdevento de Composer para copiar nuestras versiones de estos archivos sobre los principales de Magento. Debe agregar esto a su proyectocomposer.json:Esto te mostrará:
Tema como módulo de compositor
Al igual que el
magento/magento2-basepaquete está asignando archivos a la raíz del proyecto (como se describe anteriormente), también puede hacerlo usted mismo.Puedes poner tu tema en un paquete Composer separado. Tendrá que crear un repositorio separado para esto. Los documentos de Magento ya están describiendo este proceso: consulte "Convierta su tema en un paquete Composer"
Ahora agregue esto en el
composer.jsonarchivo de su tema :Asegúrese de que la primera ruta apunte a la ubicación correcta dentro de su paquete de temas. Las rutas son relativas desde la ubicación del
composer.jsonarchivo del tema .Advertencia:
Ambas soluciones están sobrescribiendo archivos principales. Esto puede causar problemas de parches o actualizaciones. Al parchar y actualizar, siempre debe verificar qué se va a cambiar y aplicar esos cambios en sus copias de estos archivos principales.
fuente
Como estoy seguro de que muchas personas se encontrarán ampliando un tema principal en lugar de crear un tema completamente desde cero, a continuación se ofrece una sintaxis ligeramente diferente para su
themes.yourThemeName.jsarchivo. En lugar de definir completamente desde cero la configuración de nuestro tema, la heredamos del padre y luego agregamos / modificamos lo que es nuevo / diferente.En este ejemplo, heredamos de la configuración en blanco, configuramos el nombre de nuestro tema y agregamos los archivos raíz adicionales de nuestro tema. Una ventaja de esto es que no tiene que declarar específicamente todos los archivos del tema principal. Para las personas que extienden un tema principal que recibe actualizaciones periódicamente, esto podría ser beneficioso. (Usar el blanco como mi escenario de ejemplo aquí probablemente no sea la situación más aplicable, pero los conceptos aplicados aquí es lo que importa).
fuente