Dynamic Import Expressions
Вирази динамічного імпорту — це нова функція та частина ECMAScript, яка дозволяє користувачам асинхронно запитувати модуль у будь-якій довільній точці вашої програми. TC39 Комітет JavaScript має власну пропозицію, яка знаходиться на етапі 3, і вона називається import() пропозиція для JavaScript.
Крім того, webpack bundler має функцію під назвою Code Splitting, яка дозволяє вам розділити ваш пакет на частини, які можна завантажено асинхронно пізніше. Наприклад, це дозволяє спочатку обслуговувати мінімальний пакет початкового завантаження, а потім асинхронно завантажувати додаткові функції.
Цілком природно думати (якщо ми використовуємо webpack у нашому робочому процесі розробників), що [вирази динамічного імпорту TypeScript 2.4](https://github.com/Microsoft/TypeScript/wiki/What%27s-new-in-TypeScript#dynamic- import-expressions) автоматично створюватиме блоки пакетів і автоматично розділятиме ваш остаточний пакет JS. АЛЕ це не так просто, як здається, оскільки залежить від конфігурації tsconfig.json, з якою ми працюємо.
Річ у тім, що при розділенні коду webpack підтримує дві подібні техніки: використання import() (бажано, пропозиція ECMAScript) і require.ensure() (успадковане, специфічне для webpack). Це означає, що очікуваний результат TypeScript залишить оператор import() таким, яким він є замість того, щоб транспілювати його на щось інше.
Давайте розглянемо приклад, щоб зрозуміти, як налаштувати webpack + TypeScript 2.4.
У наступному коді я хочу ліниво завантажити бібліотеку moment, але мене також цікавить розділення коду, що означає наявність бібліотеки моментів в окремому фрагменті JS (файлу JavaScript), який завантажуватиметься лише за потреби .
Це tsconfig.json:
Важливі примітки:
За допомогою "module": "esnext" TypeScript створює оператор mimic import(), який буде введено для розділення коду Webpack. – Для отримання додаткової інформації прочитайте цю статтю: Інтеграція Dynamic Import Expressions та webpack 2 Code Splitting із TypeScript 2.4 -splitting-integration-with-typescript-2-4/).
Повний приклад можна переглянути [тут][динамічний імпорткод].
Last updated