Dans l'implémentation RequireJS de Magento 2, de nombreux modules de base utilisent une configuration similaire à celle-ci
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
Dans RequireJS, la map
directive de configuration permet aux développeurs de dire à RequireJS
Lorsque vous chargez le module X et qu'il utilise le module Y, remplacez le module Y par le module Z - mais uniquement pour le module X
Ou, en code
map: {
'modulex':{
'moduley':'modulez'
}
}
La map
fonctionnalité vous permet essentiellement d'échanger les définitions de module via la configuration - dans Magento, c'est une fonctionnalité de réécriture de module pour javascript.
Ce qui n'est pas clair pour moi, c'est l'utilisation intensive par Magento de *
la clé de la map
propriété.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
Le *
principe dit * faire ce mappage pour tous les modules, et son cas d'utilisation prévu est de fournir un alias de module de base qui peut être modifié pour des modules plus spécifiques.
Cependant, Magento semble l'utiliser en remplacement de la paths
propriété de RequireJS . c'est-à-dire que Magento aurait pu réaliser la même chose avec ce qui suit
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
puis effectue sélectivement un mappage spécifique en cas de besoin.
Est-ce que quelqu'un sait pourquoi Magento a choisi map:*
comme méthode d'alias de chemin? c'est-à-dire - est-ce que je comprends la différence entre map
et path
incomplète - ou est-ce une de ces choses «Six d'un, une demi-douzaine d'autres». Ou existe-t-il un comportement supplémentaire que Magento obtient en procédant de cette façon?
Ne pas demander de résoudre un problème spécifique, demander de clarifier tout malentendu concernant l'implémentation de RequireJS et de Magento avant de commencer à écrire à ce sujet :)
path: {foo: 'bar'}
cela vous empêchera d'exigerbar
explicitement et ne permettra d'y accéder que parfoo
alias.