为什么Magento 2使用RequireJS`map`而不是`path`


17

在Magento 2的RequireJS实现中,许多核心模块都使用类似这样的配置

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

在RequireJS中,map配置指令允许开发人员告诉RequireJS

加载模块X并使用模块Y时,请用模块Z替换模块Y- 但仅适用于模块X

或者,在代码中

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

map功能基本上允许您通过配置交换模块定义-用Magento来说,它是javascript的模块重写功能。

不过,我不清楚Magento大量使用物业*的钥匙map

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

所述*基本上说*为做到这一点映射所有模块,以及其预期用途的情况下是是提供一个基本模块的混叠,可以更具体的模块被改变。

但是,Magento似乎用它代替了RequireJS的pathsproperty。即似乎Magento可以通过以下方法实现相同的目的

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

然后在需要时有选择地进行特定映射。

有谁知道为什么Magento选择map:*路径别名作为其方法?即-是我对mappath不完整的区别的理解-还是这是“一件六件,另一件六件”的事情之一。还是Magento通过这种方式获得一些额外的行为。

不要求解决特定问题,而是在开始撰写有关它的要求之前澄清对RequireJS和Magento实现的误解:)

Answers:


23

经过更多研究后,我发现map和之间有一个主要区别path。我不确定Magento核心团队是否有意使用此功能,但是在定义配置时,根据此Stack Overflow答案map,您实际上是在定义映射的前缀。即不仅这

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

确保加载editTrigger模块实际上加载mage/edit-trigger模块,而且editTrigger/foo会加载mage/edit-trigger/foo模块。

paths指令不是前缀映射。这是一个简单的一对一映射。


1
另外,如果我没有记错的话,path: {foo: 'bar'}将阻止您bar明确要求,并且仅允许通过foo别名进行访问。
2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.