Сборка библиотек с Rollup и tsup
Настройте Rollup или tsup для сборки компонентов React с корректным исключением React и ReactDOM из пакета
«Сборка библиотек с Rollup и tsup» — бесплатный урок React Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Почему не стоит использовать Vite для библиотек
Конфигурация Vite по умолчанию оптимизирована для приложений: она объединяет всё в один пакет, обрабатывает ресурсы и создаёт index.html. Для библиотеки компонентов нужен другой результат: чистые файлы JavaScript в форматах ESM/CJS без накладных расходов во время выполнения, без включённого React и с корректными декларациями TypeScript. Режим библиотеки Vite работает, но Rollup и tsup лучше подходят для этой задачи.
Rollup: стандарт для библиотек
Rollup уже много лет является стандартным сборщиком для библиотек JavaScript. Он создаёт чистый эффективный результат с отличным удалением неиспользуемого кода и поддерживает оба формата вывода: ESM и CJS. Подъём области видимости модулей в Rollup устраняет накладные расходы оболочек модулей, создавая максимально компактные пакеты библиотеки.
tsup: альтернатива без настройки
tsup — сборщик TypeScript без настройки, работающий на основе esbuild. Он значительно быстрее Rollup (esbuild компилирует за микросекунды, а не за миллисекунды). Минимальная конфигурация: { entry: ['src/index.ts'], format: ['esm', 'cjs'], dts: true } автоматически создаёт оба формата модулей и декларации TypeScript.
Основные параметры конфигурации tsup
Основные параметры tsup: точки входа — массив файлов, служащих точками входа. формат задаёт форматы выходных файлов: ['esm', 'cjs']. генерация деклараций типов создаёт файлы деклараций TypeScript .d.ts рядом с результатом в JS. целевая среда задаёт минимальное окружение JavaScript (esnext или es2020). разбиение отключено оставляет результат в отдельных файлах.
Компромиссы между esbuild и Rollup
esbuild (через tsup) компилирует в 10–100 раз быстрее, чем Rollup. Rollup создаёт немного более оптимизированный вывод, обеспечивая более точное удаление неиспользуемого кода и больший контроль над границами фрагментов. Для большинства библиотек компонентов скорость tsup выигрывает при разработке. Если нужен максимальный контроль над удалением неиспользуемого кода или сложные настройки с несколькими точками входа, предпочтителен Rollup.
Пометка React как внешней зависимости
Самая важная настройка сборщика для библиотеки React: никогда не включайте React или ReactDOM в сборку. Пометьте их как внешние зависимости, чтобы они не попали в вывод. Если ваша библиотека включает React в сборку, у пользователей окажутся две копии React — одна из вашей сборки, а другая из их приложения. Это нарушает работу всех хуков React из-за нескольких экземпляров React.
Настройка внешних зависимостей в tsup
В конфигурации tsup используйте опцию external: external: ['react', 'react-dom']. В конфигурации Rollup задайте external: ['react', 'react-dom', 'react/jsx-runtime']. Добавьте react/jsx-runtime, если ваша библиотека использует преобразование JSX. Также пометьте внешними все остальные одноранговые зависимости, объявленные вашей библиотекой.
Плагины Rollup для TypeScript
Для минимальной конфигурации Rollup библиотеки TypeScript требуются три плагина: @rollup/plugin-typescript для компиляции TypeScript, @rollup/plugin-node-resolve для разрешения импортов из node_modules и @rollup/plugin-commonjs для преобразования зависимостей CommonJS в ESM в составе сборки. Для файлов объявлений добавьте rollup-plugin-dts.
Структура каталога вывода
Типичный вывод библиотеки в двух форматах: dist/esm/index.js и dist/esm/index.d.ts для пользователей ESM, а также dist/cjs/index.js и dist/cjs/index.cjs для пользователей CJS. Поле экспорта в package.json сопоставляет эти пути с соответствующими средами. Файлы объявлений TypeScript находятся рядом с соответствующими файлами JS.
Несколько точек входа
Большим библиотекам полезно иметь несколько точек входа, чтобы пользователи импортировали только необходимое. Например: entry: ['src/index.ts', 'src/utils.ts', 'src/hooks.ts']. Для каждой точки входа создаются собственные файлы вывода. Поле экспорта в package.json сопоставляет каждый общедоступный путь с его выводом: './utils' → './dist/utils.js'.
Скрипт сборки в package.json
Добавьте команду сборки в скрипты package.json: "build": "tsup". tsup читает конфигурацию из tsup.config.ts в корневом каталоге. Скрипт предварительной публикации должен запускать сборку: "prepublishOnly": "npm run build" гарантирует, что перед публикацией в npm ваш пакет всегда будет собран.
Внешняя зависимость React в сборке библиотеки
Почему при сборке библиотеки компонентов React необходимо помечать как внешнюю зависимость?
Повторение урока: сборка библиотеки
tsup на основе esbuild обеспечивает быструю сборку без конфигурации с параметром format: ['esm', 'cjs'] и параметром dts: true. Rollup предоставляет более точный контроль над удалением неиспользуемого кода с помощью @rollup/plugin-typescript. Критическое правило: всегда помечайте react, react-dom и все одноранговые зависимости как внешние, чтобы не включать их в сборку. Выпускайте результат в dist/esm/ и dist/cjs/ вместе с параллельными объявлениями TypeScript. Несколько точек входа позволяют пользователям выполнять более точное удаление неиспользуемого кода.
Часто задаваемые вопросы
Урок «Сборка библиотек с Rollup и tsup» бесплатный?
Да — полный текст урока «Сборка библиотек с Rollup и tsup» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Сборка библиотек с Rollup и tsup»?
Настройте Rollup или tsup для сборки компонентов React с корректным исключением React и ReactDOM из пакета Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Сборка библиотек с Rollup и tsup»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Сборка библиотек с Rollup и tsup
- Двойной выходной формат ESM и CJS
- Одноранговые зависимости и удаление неиспользуемого кода
- Публикация в npm и семантическое версионирование