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 mapdirettiva 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 mapproprietà.
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 pathsproprietà 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 mape pathincompleta - 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 richiederebaresplicitamente e ti consentirà di accedervi solo con lofoopseudonimo.