Конфигурация Rollup строится вокруг двух фундаментальных сущностей:
точки входа и описания результата сборки. Эти сущности задаются через
поля input и output, которые формируют
минимально необходимую структуру конфигурационного файла.
input: точка входа графа зависимостейПоле input определяет исходный модуль, с которого
начинается построение графа зависимостей. Rollup анализирует
импортируемые модули, рекурсивно собирая все связанные файлы в единое
дерево.
На уровне конфигурации input может задаваться
несколькими способами:
Наиболее простой вариант — указание пути к входному файлу:
export default {
input: 'src/main.js'
};
В этом случае Rollup воспринимает src/main.js как
стартовую точку и начинает обход импортов от него.
При необходимости собрать несколько независимых графов зависимостей используется массив:
export default {
input: ['src/main.js', 'src/admin.js']
};
Каждый элемент массива становится отдельной точкой входа, что
приводит к генерации нескольких бандлов (при соответствующей настройке
output).
Более управляемая форма — объект, где ключи определяют имена выходных бандлов:
export default {
input: {
main: 'src/main.js',
admin: 'src/admin.js'
}
};
В этом случае Rollup сохраняет связь между логическим именем и результатом сборки, что особенно полезно при создании мультистраничных приложений или библиотек с несколькими точками экспорта.
output: описание результата сборкиПоле output определяет формат, структуру и место
сохранения итогового бандла. Оно может быть объектом или массивом
объектов, если требуется несколько вариантов сборки.
Минимальная конфигурация включает два ключевых параметра:
file — путь к выходному файлуformat — формат модуляНаиболее базовая конфигурация Rollup выглядит следующим образом:
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
}
};
В данной конфигурации:
input: 'src/main.js' задаёт стартовую точку анализа
зависимостейfile: 'dist/bundle.js' указывает итоговый файл
сборкиformat: 'esm' определяет формат выходного модуля как ES
Modulesoutput.formatRollup поддерживает несколько форматов, каждый из которых определяет способ упаковки модулей:
esm)Современный стандарт модульной системы:
output: {
file: 'dist/bundle.js',
format: 'esm'
}
Характеризуется сохранением import/export
синтаксиса, если это возможно.
cjs)Формат, используемый в Node.js:
output: {
file: 'dist/bundle.cjs.js',
format: 'cjs'
}
Все экспорты преобразуются в module.exports, импорты — в
require.
Самовызывающаяся функция, подходящая для браузера без сборщика:
output: {
file: 'dist/bundle.iife.js',
format: 'iife',
name: 'MyLibrary'
}
Здесь обязательным становится поле name, так как оно
формирует глобальный объект, в который будет помещён экспорт.
Универсальный формат, совместимый с AMD, CommonJS и глобальной областью:
output: {
file: 'dist/bundle.umd.js',
format: 'umd',
name: 'MyLibrary'
}
input
и output в процессе сборкиПроцесс сборки можно рассматривать как преобразование графа модулей в
конечный файл. Поле input задаёт корень графа, а
output определяет способ его сериализации.
На этапе анализа Rollup выполняет:
import и exportoutputПри расширенной конфигурации возможно комбинирование нескольких входов и нескольких выходов:
export default [
{
input: 'src/main.js',
output: {
file: 'dist/main.esm.js',
format: 'esm'
}
},
{
input: 'src/main.js',
output: {
file: 'dist/main.cjs.js',
format: 'cjs'
}
}
];
Такая структура используется для публикации библиотек, поддерживающих разные среды выполнения.
output.file и output.dirПри единичном выходном файле используется file:
output: {
file: 'dist/bundle.js',
format: 'esm'
}
При нескольких входных точках или код-сплиттинге применяется
dir:
export default {
input: {
main: 'src/main.js',
admin: 'src/admin.js'
},
output: {
dir: 'dist',
format: 'esm'
}
};
В этом случае Rollup генерирует набор файлов внутри директории
dist.
При объектной форме input ключи влияют на структуру
выходных файлов:
export default {
input: {
app: 'src/app.js',
dashboard: 'src/dashboard.js'
},
output: {
dir: 'dist',
format: 'esm'
}
};
Результатом становится генерация файлов, связанных с именами
app и dashboard, что упрощает организацию
сборки при масштабировании проекта.
Хотя Rollup конфигурация обычно статична, input может
формироваться программно:
import path from 'path';
export default {
input: path.resolve('src/main.js'),
output: {
file: 'dist/bundle.js',
format: 'esm'
}
};
Такой подход применяется при необходимости унификации путей или интеграции с внешними инструментами сборки.
input на
tree-shakingСтруктура входной точки напрямую определяет эффективность удаления неиспользуемого кода. Чем глубже и чище граф зависимостей, тем более точным становится tree-shaking.
Пример:
// src/main.js
import { used } from './utils.js';
used();
// src/utils.js
export function used() {}
export function unused() {}
Rollup исключает unused, поскольку она не достижима из
input.
Комбинация:
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm'
}
};
представляет базовый уровень абстракции Rollup, на котором строятся все расширенные сценарии: плагины, код-сплиттинг, multiple outputs, внешние зависимости и библиотечные сборки.
input и output в архитектуре Rollupinput фиксирует точку начала анализа, превращая файловую
структуру в направленный граф.
output определяет форму результата, задавая:
Связка этих двух параметров формирует минимальный контракт сборки, на котором основана вся модель работы Rollup.