Nell'implementazione di RequireJS di Magento 2, molti moduli core usano una configurazione simile a questa
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
In RequireJS, la map
direttiva di configurazione consente agli sviluppatori di comunicare a RequireJS
Quando si carica il modulo X e utilizza il modulo Y, sostituire il modulo Y con il modulo Z - ma solo per il modulo X
O, nel codice
map: {
'modulex':{
'moduley':'modulez'
}
}
Il map
funzione sostanzialmente ti consente di scambiare le definizioni dei moduli tramite la configurazione - in Magento speak, è una funzione di riscrittura dei moduli per javascript.
Ciò che non è chiaro per me è il forte uso di Magento *
come chiave per la map
proprietà.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
La *
pratica dice * fare questo mapping per tutti i moduli, e il suo caso destinazione d'uso è è di fornire un aliasing modulo base che può essere modificato per più moduli specifici.
Tuttavia, Magento sembra usarlo come sostituto della paths
proprietà di RequireJS . cioè sembra che Magento avrebbe potuto ottenere la stessa cosa con il seguente
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
e quindi esegue selettivamente una mappatura specifica quando necessario.
Qualcuno sa perché Magento ha scelto map:*
come metodo per l'aliasing dei percorsi? cioè - è la mia comprensione della differenza tra map
e path
incompleta - o è una di quelle cose "Sei di una, mezza dozzina dell'altra". Oppure c'è qualche comportamento aggiuntivo che Magento ottiene facendo in questo modo.
Non chiedere di risolvere un problema specifico, chiedere di chiarire eventuali equivoci su RequireJS e l'implementazione di Magento prima di iniziare a scriverne pesantemente :)
path: {foo: 'bar'}
ti impedirà di richiederebar
esplicitamente e ti consentirà di accedervi solo con lofoo
pseudonimo.