Tại sao Magento 2 sử dụng RequireJS `map` thay vì` path`


17

Trong triển khai RequireJS của Magento 2, nhiều mô-đun cốt lõi sử dụng cấu hình giống như thế này

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

Trong RequireJS, mapchỉ thị cấu hình cho phép các nhà phát triển nói với RequireJS

Khi bạn tải mô-đun X và nó sử dụng mô-đun Y, thay thế mô-đun Y bằng mô-đun Z - nhưng chỉ cho Mô-đun X

Hoặc, trong mã

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

Các maptính năng cơ bản cho phép bạn trao đổi trên định nghĩa mô-đun thông qua cấu hình - trong Magento nói chuyện, đó là một tính năng mô-đun viết lại cho javascript.

Điều không rõ ràng với tôi là việc Magento sử dụng rất nhiều *làm chìa khóa cho maptài sản.

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

Các *cơ bản nói * làm bản đồ này cho tất cả các mô-đun, và trường hợp mục đích sử dụng của nó là là cung cấp một răng cưa mô-đun cơ sở có thể được thay đổi để biết thêm module cụ thể.

Tuy nhiên, Magento dường như sử dụng nó để thay thế cho tài sản của RequireJSpaths . tức là có vẻ như Magento có thể đạt được điều tương tự với những điều sau đây

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

và sau đó chọn lọc làm ánh xạ cụ thể khi cần thiết.

Có ai biết tại sao Magento chọn map:*làm phương pháp cho bí danh đường dẫn không? tức là - là sự hiểu biết của tôi về sự khác biệt giữa mappathkhông đầy đủ - hoặc đây là một trong những điều "Sáu của một, một nửa tá những thứ khác". Hoặc có một số hành vi bổ sung mà Magento có được bằng cách thực hiện theo cách này.

Không yêu cầu giải quyết một vấn đề cụ thể, yêu cầu làm rõ mọi hiểu lầm về việc triển khai RequireJS và Magento trước khi tôi bắt đầu viết nhiều về nó :)

Câu trả lời:


22

Sau khi nghiên cứu thêm một chút, tôi đã tìm thấy một sự khác biệt lớn giữa mappath. Tôi không chắc liệu nhóm lõi Magento có sử dụng điều này một cách có chủ ý hay không, nhưng theo câu trả lời Stack Overflow này khi bạn xác định mapcấu hình, bạn thực sự đang xác định tiền tố cho ánh xạ. tức là không chỉ điều này

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

đảm bảo việc tải các editTriggermô-đun thực sự tải mage/edit-triggermô-đun, mà còneditTrigger/foosẽ nạp mage/edit-trigger/foomodule.

Lệnh pathsnày không phải là ánh xạ tiền tố. Đó là một ánh xạ một-một đơn giản.


1
Ngoài ra, nếu tôi nhớ lại chính xác, path: {foo: 'bar'}sẽ chặn bạn yêu cầu barrõ ràng và sẽ chỉ cho phép truy cập nó bằng foobí danh.
mms27
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.