Magento 2가`path` 대신 RequireJS`map`을 사용하는 이유


19

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에서 말하면, 이것은 자바 스크립트를위한 모듈 재 작성 기능입니다.

분명하지 않은 것은 마 젠토가 부동산 *의 열쇠로 많이 사용한다는 것 map입니다.

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

*기본적으로이 매핑을 * 말한다 모든 모듈 및 사용 목적의 경우와는 기본 모듈 별명 제공하는 보다 구체적인 모듈에 변경 될 수 있습니다.

그러나 Magento는이를 RequireJS의 paths속성을 대체하는 것으로 사용 합니다 . 즉, Magento는 다음과 같은 것을 달성했을 수 있습니다.

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

필요한 경우 특정 매핑을 선택적으로 수행합니다.

Magento가 map:*경로 앨리어싱 방법으로 선택한 이유를 아는 사람이 있습니까? 즉 map, path불완전 하고 불완전한 차이에 대한 나의 이해인가, 아니면 "6 가지 중 하나, 6 가지 다른 것"중 하나입니다. 또는 이런 식으로 Magento가 얻는 추가 행동이 있습니까?

특정 문제를 해결하도록 요구하지 않고 RequireJS와 Magento의 구현에 대한 오해를 명확히하기 위해 묻습니다.

답변:


25

이것을 조금 더 연구 한 결과 map와와의 주요 차이점이 하나 path있습니다. Magento 핵심 팀이 의도적으로 이것을 사용하는지 확실하지 않지만 구성을 정의 할 때이 스택 오버플로 답변에 따라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.