Magento 2が `path`ではなくRequireJS` map`を使用する理由


17

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で言えば、これは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不完全です-または、これらの「1つのうちの6つ、他の6つ」のものの1つです。または、この方法でMagentoが取得する追加の動作があります。

特定の問題を解決することを求めず、RequireJSとMagentoの実装についての誤解を明確にするように求めます。

回答:


22

もう少しこれを研究した後、私は間に1つの大きな違いを発見したmapとしますpath。Magentoコアチームがこれを意図的に使用しているかどうかはわかりませんが、構成を定義するときのこのStack Overflowの回答に従ってmap、実際にマッピングのプレフィックスを定義しています。すなわちこれだけでなく

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

ロード確保editTriggerモジュールが実際にロードするmage/edit-triggerモジュールを、だけでなく、そのeditTrigger/fooロードするmage/edit-trigger/fooモジュールを。

pathsディレクティブは、接頭辞マッピングではありません。これは、単純な1対1のマッピングです。


1
また、正しく思い出せば、明示的にpath: {foo: 'bar'}要求することをブロックbarし、fooエイリアスによるアクセスのみを許可します。
mms27
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.