Dynamic import()
import() — выражение (не function call), возвращающее Promise<ModuleNamespace>; это ключевой инструмент code splitting и lazy loading, работающий и в ESM, и в CJS, с кэшированием по URL.
// import() возвращает Promise<ModuleNamespace>// Работает в ESM (.mjs) и в CJS (require-файлах) — Node.js 12+const { default: lodash, chunk } = await import('lodash');console.log(chunk([1,2,3,4,5], 2)); // [[1,2],[3,4],[5]]
// Code splitting — webpack/Rollup/Vite создадут отдельный chunkasync function loadHeavyFeature() { const { HeavyComponent } = await import('./HeavyComponent.js'); return HeavyComponent;}
// React.lazy для route-level code splittingconst AdminPage = React.lazy(() => import('./AdminPage.jsx'));// Vite автоматически создаёт admin-[hash].chunk.js// Условная загрузка polyfillconst intersection = await ( 'IntersectionObserver' in window ? Promise.resolve({ default: class {} }) // no-op : import('intersection-observer'));
// Динамический путь (осторожно: bundler включит ВСЕ совпадения)const locale = getUserLocale(); // 'en' | 'ru' | 'de'const messages = await import(`./locales/${locale}.js`);// Bundler создаст chunk для КАЖДОГО файла locales/*.js
// Prefetch для ускорения последующего import():const link = document.createElement('link');link.rel = 'modulepreload';link.href = '/heavy-feature.js';document.head.appendChild(link); // прогрузить до клика пользователя// Потом: await import('/heavy-feature.js') → из кэша// Кэширование: import() кэширует по URL (как require)const p1 = import('./module.js');const p2 = import('./module.js');console.log(p1 === p2); // true — один Promise из кэша
// import() в CJS файлах — способ загрузить ESM без рефакторинга// legacy.cjs:async function useModernLib() { const { fn } = await import('./modern-lib.mjs'); return fn();}
// Принудительная перезагрузка модуля (hack):// const fresh = await import(`./module.js?v=${Date.now()}`);// ОСТОРОЖНО: разный URL = новый модуль в кэше = memory leak!// Используйте только в devtools / hot reload сценарияхИтог: import() — выражение, возвращающее Promise<ModuleNamespace>; кэшируется по URL, работает в ESM и CJS, является основой code splitting в современных bundler-ах.