Dalam implementasi Magento 2 yang diperlukan, banyak modul inti menggunakan konfigurasi seperti ini
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
Di RequireJS, map
arahan konfigurasi memungkinkan pengembang untuk memberi tahu RequireJS
Saat Anda memuat modul X, dan menggunakan modul Y, ganti modul Y dengan modul Z - tetapi hanya untuk Modul X
Atau, dalam kode
map: {
'modulex':{
'moduley':'modulez'
}
}
The map
fitur pada dasarnya memungkinkan Anda untuk swap keluar definisi modul melalui konfigurasi - di Magento berbicara, itu adalah fitur modul rewrite untuk javascript.
Apa yang tidak jelas bagi saya adalah penggunaan Magento *
sebagai kunci untuk map
properti.
map: {
'*': {
editTrigger: 'mage/edit-trigger',
addClass: 'Magento_Translation/add-class'
}
}
Pada *
dasarnya mengatakan * lakukan pemetaan ini untuk semua modul, dan kasus penggunaan yang dimaksudkan adalah menyediakan modul dasar alias yang dapat diubah untuk modul yang lebih spesifik.
Namun, Magento tampaknya menggunakannya sebagai pengganti properti RequireJSpaths
. yaitu sepertinya Magento bisa mencapai hal yang sama dengan yang berikut ini
paths: {
'editTrigger': 'mage/edit-trigger',
'addClass': 'Magento_Translation/add-class',
}
dan kemudian secara selektif melakukan pemetaan spesifik bila diperlukan.
Adakah yang tahu mengapa Magento memilih map:*
sebagai metode untuk path alias? yaitu - adalah pemahaman saya tentang perbedaan antara map
dan path
tidak lengkap - atau satu ini dari mereka "Enam dari satu, setengah lusin yang lain" hal. Atau ada beberapa perilaku tambahan yang didapatkan Magento dengan melakukannya dengan cara ini.
Tidak meminta untuk memecahkan masalah tertentu, meminta untuk mengklarifikasi kesalahpahaman apa pun tentang implementasi RequireJS dan Magento sebelum saya mulai menulis banyak tentang hal ini :)
sumber
path: {foo: 'bar'}
akan memblokir Anda dari memintabar
secara eksplisit dan hanya akan memungkinkan untuk mengaksesnya denganfoo
alias.