Как будет работать динамический импорт после сборки без использования сборщика?
Продвинутые темы
Динамический импорт `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).