Perché Magento 2 usa RequireJS `map` invece di` path`


17

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 :)

Risposte:


23

Dopo aver studiato questo un po 'di più, ho trovato una grande differenza tra mape path. Non sono sicuro che il core team di Magento faccia un uso deliberato di questo, ma per questa risposta Stack Overflow quando si definisce una mapconfigurazione, si sta effettivamente definendo un prefisso per i mapping. cioè non solo questo

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
    }
}

assicurarsi che il caricamento del editTriggermodulo carichi effettivamente il mage/edit-triggermodulo, ma anche quello editTrigger/foocaricherà il mage/edit-trigger/foomodulo.

La pathsdirettiva non è un mapping di prefissi. È una semplice mappatura individuale.


1
Inoltre, se ricordo correttamente, path: {foo: 'bar'}ti impedirà di richiedere baresplicitamente e ti consentirà di accedervi solo con lo foopseudonimo.
mms27
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.