Как SystemJS поддерживает несколько версий одной и той же библиотеки?
Я работаю над приложением jspm/systemjs и хотел бы лучше понять, как SystemJS обрабатывает несколько версий одной и той же зависимости. Рассмотрим следующий (упрощенный) пример конфигурации SystemJS:
map: {
"react": "npm:react@0.14.8"
"npm:foo": {
"react": "npm:react@0.14.7"
}
}
Я предполагал, что когда мой импортированный код отреагирует, он получит v0.14.8, а код в зависимости "foo" получит v0.14.7. Тем не менее, консоль моего браузера выводит предупреждения о том, что найдено несколько копий реагирования.
Вопросы:
- Как SystemJS поддерживает несколько версий зависимостей,
- Почему я получаю такую ошибку, если разные версии хранятся отдельно?
1 ответ
Поскольку SystemJS использует карты импорта, вы можете использовать этот подход:
Использование нескольких версий одного и того же модуля Легко потребовать несколько версий одного и того же пакета с картами импорта. Все, что вам нужно сделать, это использовать другой спецификатор импорта в сопоставлении, как показано ниже:
<script type="importmap">
{
"imports": {
"lodash@3/": "https://unpkg.com/lodash-es@3.10.1/",
"lodash@4/": "https://unpkg.com/lodash-es@4.17.21/"
}
}
</script>
Вы также можете использовать один и тот же спецификатор импорта для ссылки на разные версии одного и того же пакета с помощью областей. Это позволяет изменить значение спецификатора импорта в заданной области.
<script type="importmap">
{
"imports": {
"lodash/": "https://unpkg.com/lodash-es@4.17.21/"
},
"scopes": {
"/static/js": {
"lodash/": "https://unpkg.com/lodash-es@3.10.1/"
}
}
}
</script>
При таком сопоставлении любые модули в пути /static/js будут использовать URL-адрес https://unpkg.com/ [email protected] / при обращении к спецификатору lodash/ в операторе импорта, в то время как другие модули будут использовать https:/ /unpkg.com/ [электронная почта защищена] / .