У реалізації Magento 2 RequireJS багато основних модулів використовують конфігурацію, подібну до цієї
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
У RequireJS map
директива конфігурації дозволяє розробникам повідомляти RequireJS
Коли ви завантажуєте модуль X, і він використовує модуль Y, замініть модуль Y модулем Z - але тільки для модуля X
Або в коді
map: {
'modulex':{
'moduley':'modulez'
}
}
Ця map
функція в основному дозволяє замінювати визначення модулів за допомогою конфігурації - якщо говорити Magento, це функція перезапису модуля для javascript.
Що мені незрозуміло, хоч велике використання Magento *
як ключ до map
майна.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
В *
основному говорить * виконайте це відображення для всіх модулів, і його передбачуваний випадок використання полягає в наданні псевдоніму базового модуля, який можна змінити для більш конкретних модулів.
Однак, схоже, Magento використовує його як заміну для майна RequireJSpaths
. тобто здається, що Мадженто міг би досягти того ж, з наступним
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
а потім вибірково робить конкретні карти, коли це потрібно.
Хтось знає, чому Magento обрав map:*
своїм методом для згладжування шляху? тобто - це моє розуміння різниці між map
і path
неповним - чи це одна з тих речей "Шість з одного, півдесятка інших". Або є якась додаткова поведінка, яку Magento отримує, роблячи це таким чином.
Не вимагаючи вирішити конкретну проблему, прошу роз'яснити будь-які непорозуміння впровадження RequireJS та Magento, перш ніж я почати сильно писати про це :)
path: {foo: 'bar'}
заблокує вас відbar
явного вимагання і дозволить отримати доступ до нього лишеfoo
псевдонімом.