PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как будет работать динамический импорт после сборки без использования сборщика?

Продвинутые темы

Динамический импорт `import()` без сборщика работает нативно в браузере (для ES-модулей), загружая модуль по сети асинхронно и возвращая промис, но требует правильных путей, MIME-типов и поддержки ES-модулей.

Нативная поддержка

Современные браузеры поддерживают динамический import() в модулях без сборки:

<script type="module">
  const module = await import('./utils.js'); // загрузит файл по сети
  module.doWork();
</script>

import() возвращает промис, модуль загружается по сети в момент вызова.

Что нужно для работы без сборщика

  • `type="module"` — скрипт должен быть модулем.
  • Правильные пути — относительные (./, ../) или абсолютные URL; «голые» импорты (import 'lodash') без сборщика/import maps не работают.
  • MIME-тип — сервер должен отдавать .js с Content-Type: text/javascript.
  • CORS — при загрузке с другого origin нужны заголовки.

Отличия от сборки

  • Без сборщика — каждый модуль грузится отдельным сетевым запросом по требованию; нет бандлинга, tree shaking, минификации.
  • Со сборщиком — import() создаёт отдельный чанк, оптимизированный (бандл, минификация, хеши).

Ограничения без сборки

  • Много модулей → много запросов (медленнее без HTTP/2).
  • Нет трансформаций (JSX, TS не работают нативно).
  • Нет обработки не-JS импортов (CSS, изображения).

Коротко для собеседования

Без сборщика динамический import() работает нативно в браузере (в type="module"): загружает модуль по сети асинхронно, возвращает промис. Нужны правильные пути (относительные/URL, не «голые»), корректный MIME-тип, ES-модули. Отличие от сборки — каждый модуль отдельным запросом, без бандлинга/tree shaking/минификации и трансформаций (JSX/TS).

Другие вопросы раздела