Как федерация модулей выбирает, какую версию зависимости использовать?
Я играл с этим примером объединения модулей , где настройка относительно проста - хост потребляет модуль с удаленного компьютера с общей зависимостью реакции. При запуске этого локально я заметил, что, несмотря на то, что и хост, и удаленный компьютер имеют одинаковые версии response / response-dom, удаленная версия всегда загружается.
Основываясь на моем исследовании, кажется, что федерация модулей выберет «лучшую» версию общих зависимостей, но я удивлен, что удаленная версия будет выбрана в случае, когда обе имеют одинаковую версию. Как принято это решение? Есть ли способ принудительно использовать версию хоста в этом случае?
2 ответа
Обычно, когда ваш хост запускается, он зарегистрирует все имеющиеся у него версии в общей области. Каждый раз, когда вы загружаете
remoteEntry.js
Так, например, если хост разделяет
module-a
version 1.0.0
. Когда хост загружается, он помещается в общий контекст. Если пульт также предоставляет общий доступ, он не помещает его в контекст, потому что он уже существует. Если хост использовался совместно, контекст теперь будет иметь две версии:
module-a:1.0.0
от хозяина и
module-a:1.0.1
с пульта.
На данный момент мы просто говорим о регистрации ... мы не выбрали, какую версию использовать, но мы регистрируем все уникальные версии, общие для всех пультов и хостов. И в основном побеждает тот, кто его зарегистрирует первым.
Теперь, когда алгоритм разрешения версии запускается ... он определит на основе всех требований, какую версию использовать. Если алгоритм выбирает версию модуля, он переходит в область видимости и использует любой модуль, назначенный версии.
1.0.0
1.0.1
затем он будет использовать тот из пульта дистанционного управления, который первым зарегистрировал его в области видимости.
В этой статье очень хорошо объясняется механизм. https://www.angulararchitects.io/en/aktuelles/getting-out-of-version-mismatch-hell-with-module-federation/