Как 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. Тем не менее, консоль моего браузера выводит предупреждения о том, что найдено несколько копий реагирования.

Вопросы:

  1. Как SystemJS поддерживает несколько версий зависимостей,
  2. Почему я получаю такую ​​ошибку, если разные версии хранятся отдельно?

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/ [электронная почта защищена] / .

Источник: https://www.honeybadger.io/blog/import-maps/

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