tsconfig.json при использовании Rollup определяет не процесс сборки, а правила компиляции TypeScript до этапа бандлинга. Rollup в этой связке выступает как инструмент объединения модулей, а TypeScript — как транспайлер и система типизации. Граница ответственности между ними принципиальна: TypeScript превращает TS в JS, Rollup формирует итоговые бандлы, выполняет tree-shaking и оптимизацию.
Основная сложность настройки заключается в том, что конфигурация TypeScript должна быть согласована с моделью ESM, которую ожидает Rollup, иначе возникают конфликты модульной системы, дублирование преобразований или некорректная генерация типов.
При работе с Rollup TypeScript чаще всего используется в режиме:
Ключевая идея — TypeScript не должен превращать модули в CommonJS, иначе Rollup теряет возможность корректного tree-shaking.
Наиболее критичные поля tsconfig.json:
{
"compilerOptions": {
"target": "ES2019",
"module": "ESNext"
}
}
target определяет уровень синтаксиса, в который компилируется код. Для Rollup предпочтительны значения ES2017–ES2022, так как современные окружения и бандлеры поддерживают этот синтаксис без дополнительной трансформации.
module должен быть строго "ESNext" или
"ES2020+".
Любые значения вроде "CommonJS" или "AMD"
ломают модель Rollup, поскольку:
Современный стандарт конфигурации:
{
"compilerOptions": {
"moduleResolution": "Bundler"
}
}
moduleResolution: "Bundler" появился в новых версиях
TypeScript и предназначен именно для инструментов сборки (Rollup, Vite,
esbuild). Он изменяет поведение резолвинга следующим образом:
Альтернатива:
"moduleResolution": "NodeNext"
Используется при строгой эмуляции Node ESM, но в связке с Rollup часто избыточен и усложняет конфигурацию.
Rollup сам по себе не генерирует .d.ts файлы. Это делает
TypeScript при включённой опции:
{
"compilerOptions": {
"declaration": true,
"declarationMap": true
}
}
Однако в связке с Rollup важно разделять:
Типичная ошибка — попытка заставить Rollup генерировать декларации
через @rollup/plugin-typescript без отдельной стадии
tsc. Это приводит к неполным или некорректным
.d.ts.
Практически корректная модель:
{
"compilerOptions": {
"isolatedModules": true
}
}
Эта опция критична при использовании Rollup через плагины
(@rollup/plugin-typescript,
rollup-plugin-esbuild).
Причина:
При отключённом isolatedModules возможны ошибки:
const enum{
"compilerOptions": {
"sourceMap": true,
"inlineSources": true
}
}
Rollup поддерживает объединение sourcemap-ов из разных источников. Важный момент — избегать двойной генерации карт:
.map.mapВ итоге используется цепочка:
TS → intermediate JS → Rollup bundle
Rollup должен уметь объединять sourcemap через
sourcemap: true в output конфигурации.
{
"compilerOptions": {
"esModuleInterop": true,
"allowSyntheticDefaultImports": true
}
}
Эти параметры критичны при смешанных зависимостях.
Rollup часто подключает плагины:
@rollup/plugin-commonjs@rollup/plugin-node-resolveПри этом TypeScript сам по себе не знает, как выглядят CJS-модули в рантайме. Поэтому:
esModuleInterop позволяет корректно импортировать
default из CommonJSallowSyntheticDefaultImports снижает количество ошибок
компиляцииПри использовании Rollup TypeScript не должен создавать собственный output-бандл:
{
"compilerOptions": {
"noEmit": true
}
}
Эта настройка переводит TypeScript в режим проверки типов и подготовки AST для плагинов.
Типичная схема:
{
"compilerOptions": {
"lib": ["ES2020", "DOM"]
}
}
Параметр lib определяет доступные глобальные API.
Для библиотек, собираемых Rollup, выбор lib влияет
на:
Важно избегать избыточного расширения lib, так как это
может привести к ложным ожиданиям API в рантайме.
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@core/*": ["src/core/*"],
"@utils/*": ["src/utils/*"]
}
}
}
TypeScript понимает алиасы, но Rollup — нет по умолчанию.
Поэтому требуется синхронизация:
@rollup/plugin-alias или
rollup-plugin-tsconfig-paths для сборкиНесовпадение приводит к ошибкам вида:
{
"compilerOptions": {
"strict": true
}
}
Strict-режим в связке с Rollup усиливает требования к качеству кода:
При сборке библиотек это критично, поскольку Rollup не исправляет ошибки типов — он работает уже с готовым JS.
{
"compilerOptions": {
"skipLibCheck": true
}
}
Опция отключает проверку .d.ts файлов зависимостей.
В проектах с Rollup это часто используется для:
{
"compilerOptions": {
"composite": true
}
}
Используется в монорепозиториях, где Rollup собирает отдельные пакеты.
Особенности:
Rollup при этом остаётся финальным шагом объединения артефактов.
В типичной архитектуре:
TypeScript конфигурация отвечает за:
Rollup отвечает за:
Пересечение этих зон приводит к избыточным трансформациям и нестабильной сборке.
{
"compilerOptions": {
"target": "ES2019",
"module": "ESNext",
"moduleResolution": "Bundler",
"strict": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"declaration": true,
"sourceMap": true,
"isolatedModules": true,
"skipLibCheck": true,
"noEmit": true,
"lib": ["ES2020"]
}
}
Такая конфигурация ориентирована на сценарий, где TypeScript выполняет роль строгого анализатора и подготовителя типов, а Rollup — полностью контролирует генерацию артефактов сборки.