Как федерация модулей выбирает, какую версию зависимости использовать?

Я играл с этим примером объединения модулей , где настройка относительно проста - хост потребляет модуль с удаленного компьютера с общей зависимостью реакции. При запуске этого локально я заметил, что, несмотря на то, что и хост, и удаленный компьютер имеют одинаковые версии 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/

Другие вопросы по тегам