Выбор ответа Middle Модули обновлено

Что мешает tree shaking

Вопрос

Из библиотеки утилит используется одна функция, а в бандл попала вся библиотека. Какая причина самая вероятная?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Библиотека поставляется в формате CommonJS или помечена как модуль с побочными эффектами. Tree shaking опирается на статическую структуру ESM.

Варианты ответа

  1. Функция импортирована через именованный импорт import { debounce } from 'utils'
  2. Библиотека поставляется в формате CommonJS или помечена как модуль с побочными эффектамиправильный ответ
  3. Проект собран в режиме production, и минификатор склеил все модули в один
  4. В проекте включён TypeScript, а он отключает удаление неиспользуемого кода

Разбор

Tree shaking опирается на статическую структуру ESM. CommonJS-модуль сборщик не может надёжно разобрать на части, и он попадает целиком. Ещё сборщик оставит модули, которые могут иметь побочные эффекты при импорте, если пакет не объявил "sideEffects": false. Именованный импорт как раз помогает удалению. Production-режим включает минификацию и удаление мёртвого кода, а не мешает им. TypeScript сам по себе на tree shaking не влияет, если не компилирует модули в CommonJS.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.