Na implementação RequireJS do Magento 2, muitos módulos principais usam uma configuração semelhante a esta
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
No RequireJS, a map
diretiva de configuração permite que os desenvolvedores digam ao RequireJS
Quando você carrega o módulo X e ele usa o módulo Y, substitua o módulo Y pelo módulo Z - mas apenas para o módulo X
Ou, no código
map: {
'modulex':{
'moduley':'modulez'
}
}
O map
recurso basicamente permite que você troque as definições dos módulos via configuração - no Magento, é um recurso de reescrita de módulo para javascript.
O que não está claro para mim, porém, é o uso pesado de Magento *
como a chave para a map
propriedade.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
O *
basicamente diz * faça esse mapeamento para todos os módulos, e seu caso de uso pretendido é fornecer um aliasing de módulo básico que pode ser alterado para módulos mais específicos.
No entanto, o Magento parece usá-lo como um substituto da paths
propriedade do RequireJS . ou seja, parece que o Magento poderia ter conseguido a mesma coisa com os seguintes
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
e, em seguida, faz seletivamente o mapeamento específico quando necessário.
Alguém sabe por que o Magento escolheu map:*
como método de alias de caminho? ie - é meu entendimento da diferença entre map
e path
incompleto - ou é uma daquelas coisas "Seis de uma, meia dúzia das outras". Ou existe algum comportamento adicional que o Magento obtém ao fazê-lo dessa maneira.
Não pedindo para resolver um problema específico, pedindo para esclarecer quaisquer mal-entendidos da implementação do RequireJS e Magento antes de começar a escrever bastante sobre isso :)
fonte
path: {foo: 'bar'}
impedirá você de exigirbar
explicitamente e permitirá apenas acessá-lo porfoo
apelido.