เพราะเหตุใด Magento 2 จึงใช้ RequireJS` map` แทนที่จะเป็น "path"


17

ในการติดตั้ง RequireJS ของ Magento 2 โมดูลหลักจำนวนมากใช้การกำหนดค่าแบบนี้

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
        addClass:      'Magento_Translation/add-class'
    }
}

ใน RequireJS mapคำสั่งกำหนดค่าอนุญาตให้ผู้พัฒนาสามารถบอก RequireJS ได้

เมื่อคุณโหลดโมดูล X และใช้โมดูล Y แทนที่โมดูล Y ด้วยโมดูล Z - แต่สำหรับโมดูล X เท่านั้น

หรือในรหัส

map: {
    'modulex':{
        'moduley':'modulez'
    }
}

mapคุณลักษณะโดยทั่วไปช่วยให้คุณสามารถสลับออกคำจำกัดความโมดูลผ่านการตั้งค่า - ในวีโอไอพีพูดมันเป็นคุณลักษณะโมดูลสำหรับเขียนจาวาสคริปต์

สิ่งที่ไม่ชัดเจนสำหรับฉันคือการใช้ Magento อย่างหนักใน*ฐานะกุญแจสำหรับmapอสังหาริมทรัพย์

map: {
    '*': {
        editTrigger:   'mage/edit-trigger',
        addClass:      'Magento_Translation/add-class'
    }
}

*โดยทั่วไปว่า * ทำทำแผนที่นี้ได้ทุกโมดูลและกรณีการใช้งานที่ตั้งใจไว้คือเป็นให้ aliasing โมดูลฐานที่สามารถเปลี่ยนแปลงได้สำหรับโมดูลเฉพาะเจาะจงมากขึ้น

อย่างไรก็ตามวีโอไอพีจะปรากฏขึ้นเพื่อใช้แทนสำหรับRequireJS ของpathsสถานที่ให้บริการ นั่นคือดูเหมือนว่าวีโอไอพีจะประสบความสำเร็จในสิ่งเดียวกันด้วยสิ่งต่อไปนี้

paths: {
    'editTrigger': 'mage/edit-trigger',
    'addClass':    'Magento_Translation/add-class',
}

จากนั้นเลือกการทำแผนที่เฉพาะเมื่อจำเป็น

ไม่มีใครรู้ว่าเพราะเหตุใด Magento จึงเลือกmap:*ใช้วิธีการสร้างสมนามเส้นทาง เช่น - คือความเข้าใจของฉันเกี่ยวกับความแตกต่างระหว่างmapและpathไม่สมบูรณ์ - หรือเป็นหนึ่งในสิ่งเหล่านี้ "หกในหนึ่งครึ่งอีกครึ่งโหล" หรือมีพฤติกรรมเพิ่มเติมที่วีโอไอพีได้รับโดยการทำเช่นนี้

ไม่ขอให้แก้ปัญหาเฉพาะเจาะจงขอให้ชี้แจงความเข้าใจผิดเกี่ยวกับการใช้ RequireJS และ Magento ก่อนที่ฉันจะเริ่มเขียนเรื่องนี้ :)

คำตอบ:


23

หลังจากการค้นคว้าบิตมากกว่านี้ฉันได้พบหนึ่งความแตกต่างที่สำคัญระหว่างและmap pathฉันไม่แน่ใจว่าทีมหลักของวีโอไอพีใช้ประโยชน์โดยเจตนานี้หรือไม่ แต่ตามคำตอบสแต็คโอเวอร์โฟลว์นี้เมื่อคุณกำหนดการmapตั้งค่าคุณจะกำหนดคำนำหน้าสำหรับการแมป เช่นนี้จะไม่เพียง

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

ตรวจสอบให้แน่ใจว่าโหลดeditTriggerโมดูลจริงโหลดmage/edit-triggerโมดูลแต่ยังที่editTrigger/fooจะโหลดmage/edit-trigger/fooโมดูล

pathsสั่งไม่ได้เป็นคำนำหน้าทำแผนที่ เป็นการทำแผนที่แบบหนึ่งต่อหนึ่งอย่างง่าย


1
นอกจากนี้หากฉันจำได้อย่างถูกต้องpath: {foo: 'bar'}จะป้องกันคุณจากการกำหนดbarอย่างชัดเจนและจะอนุญาตให้เข้าถึงได้โดยfooนามแฝง
mms27
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.