En la implementación RequireJS de Magento 2, muchos módulos principales usan una configuración similar a esta
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
En RequireJS, la map
directiva de configuración permite a los desarrolladores decirle a RequireJS
Cuando cargue el módulo X y use el módulo Y, reemplace el módulo Y con el módulo Z, pero solo para el Módulo X
O, en código
map: {
'modulex':{
'moduley':'modulez'
}
}
La map
característica básicamente le permite intercambiar definiciones de módulos a través de la configuración: en Magento speak, es una función de reescritura de módulos para javascript.
Sin embargo, lo que no está claro para mí es el uso intensivo de Magento *
como la clave de la map
propiedad.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
El *
dice básicamente * hacer esta asignación para todos los módulos, y su caso es el uso previsto es proporcionar un alias de módulo base que puede ser cambiado para más módulos específicos.
Sin embargo, Magento parece usarlo como un reemplazo para la paths
propiedad de RequireJS . es decir, parece que Magento podría haber logrado lo mismo con lo siguiente
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
y luego realiza un mapeo selectivo cuando sea necesario.
¿Alguien sabe por qué Magento eligió map:*
como método de alias de ruta? es decir, - es mi comprensión de la diferencia entre map
e path
incompleta - o se trata de uno de los "Seis de uno, media docena de las otras cosas". ¿O hay algún comportamiento adicional que Magento obtiene al hacerlo de esta manera?
No pedir resolver un problema específico, pedir aclarar cualquier malentendido sobre la implementación de RequireJS y Magento antes de comenzar a escribir mucho sobre él :)
fuente
path: {foo: 'bar'}
bloqueará su solicitudbar
explícitamente y solo permitirá acceder a él porfoo
alias.