Тип InputOptions описывает конфигурацию, с которой
Rollup начинает процесс построения графа модулей. Эти параметры
определяют, какие исходные файлы считаются точкой входа, как
анализируются зависимости, какие плагины участвуют в трансформации кода
и каким образом интерпретируются модули на этапе сборки.
Ключевая роль InputOptions заключается в формировании
абстрактного графа зависимостей, который затем
преобразуется в один или несколько выходных бандлов.
Упрощённо структура может быть представлена следующим образом:
interface InputOptions {
input?: string | string[] | { [entryAlias: string]: string };
plugins?: Plugin[];
external?: ExternalOption;
onwarn?: (warning, warn) => void;
treeshake?: boolean | TreeshakingOptions;
context?: string;
moduleContext?: ((id: string) => string) | Record<string, string>;
cache?: RollupCache;
acorn?: any;
acornInjectPlugins?: Function[];
preserveEntrySignatures?: 'strict' | 'allow-extension' | 'exports-only' | false;
shimMissingExports?: boolean;
inlineDynamicImports?: boolean;
manualChunks?: never;
}
Несмотря на кажущуюся простоту, этот тип управляет критически важными стадиями анализа исходного кода.
input определяет стартовую точку построения графа
зависимостей. Rollup рассматривает указанный модуль как корень дерева
импортов.
input: 'src/main.js'
input: ['src/main.js', 'src/admin.js']
input: {
app: 'src/main.js',
admin: 'src/admin.js'
}
Именованный формат влияет на генерацию выходных файлов через
OutputOptions.entryFileNames.
Поле plugins является одним из ключевых в архитектуре
Rollup. Оно принимает массив плагинов, каждый из которых реализует
жизненный цикл трансформации модулей.
Плагины могут:
transform)resolveId)load)generateBundle)plugins: [
resolve(),
commonjs(),
typescript()
]
Порядок плагинов критически важен, так как влияет на последовательность обработки модулей.
external определяет модули, которые не должны включаться
в итоговую сборку.
external: ['react', 'lodash']
external: id => id.startsWith('node:')
treeshake управляет механизмом tree-shaking — удалением
неиспользуемых экспортов.
treeshake: true
treeshake: {
moduleSideEffects: true,
propertyReadSideEffects: false
}
Tree-shaking является одной из ключевых оптимизаций Rollup.
Определяет значение this в модулях:
context: 'globalThis'
Позволяет задавать контекст точечно:
moduleContext: (id) => {
if (id.includes('legacy')) return 'window';
return 'globalThis';
}
Используется при интеграции старых библиотек, зависящих от глобального контекста.
cache сохраняет результаты предыдущего анализа графа
модулей.
let cache;
const inputOptions = {
input: 'src/index.js',
cache
};
Управляет тем, как Rollup сохраняет сигнатуру экспортов entry-модулей.
'strict' — строгая проверка экспортов'exports-only' — только экспортированные символы'allow-extension' — допускает расширение сигнатурыfalse — отключение контроляЕсли включено:
inlineDynamicImports: true
Rollup объединяет динамические import() в один бандл,
запрещая code-splitting.
OutputOptions управляет тем, как сформированный граф
модулей превращается в финальные файлы: один или несколько бандлов, их
формат, структуру и именование.
interface OutputOptions {
file?: string;
dir?: string;
format: 'esm' | 'cjs' | 'iife' | 'umd' | 'system';
name?: string;
globals?: Record<string, string>;
plugins?: Plugin[];
banner?: string | (() => string);
footer?: string | (() => string);
intro?: string | (() => string);
outro?: string | (() => string);
sourcemap?: boolean | 'inline' | 'hidden';
entryFileNames?: string;
chunkFileNames?: string;
assetFileNames?: string;
manualChunks?: Record<string, string[]> | ((id: string) => string);
exports?: 'auto' | 'named' | 'default' | 'none';
extend?: boolean;
externalLiveBindings?: boolean;
freeze?: boolean;
interop?: 'auto' | 'esModule' | 'default' | 'compat';
compact?: boolean;
}
format определяет модульную систему итогового
бандла.
esm — ES Modulescjs — CommonJSiife — самовызывающаяся функцияumd — универсальный форматsystem — SystemJSФормат определяет:
Используется для одиночного бандла:
output: {
file: 'dist/bundle.js',
format: 'esm'
}
Используется для code-splitting:
output: {
dir: 'dist',
format: 'esm'
}
При dir Rollup генерирует набор файлов: chunks, entry и
assets.
Эти параметры управляют именованием выходных файлов.
entryFileNames: '[name]-[hash].js'
chunkFileNames: 'chunks/[name]-[hash].js'
assetFileNames: 'assets/[name]-[hash][extname]'
[name] — имя модуля[hash] — хеш содержимого[extname] — расширение файлаИспользуется при umd или iife форматах:
globals: {
react: 'React',
lodash: '_'
}
Позволяет связать внешние зависимости с глобальными переменными.
manualChunks: {
vendor: ['react', 'react-dom']
}
manualChunks(id) {
if (id.includes('node_modules')) {
return 'vendor';
}
}
Позволяет вручную управлять стратегией code splitting.
exports: 'named'
Варианты:
autonameddefaultnoneОпределяет совместимость с различными системами модулей.
interop: 'auto'
Управляет тем, как Rollup обрабатывает импорт CommonJS в ESM окружении.
sourcemap: true
Варианты:
true — отдельный файлinline — встроенная картаhidden — без ссылки, но файл создаётсяПозволяют вставлять код до и после основного бандла:
banner: '/* build: production */',
footer: '/* end */'
Используется для лицензий, глобальных обёрток и метаинформации.
Запрещает мутацию экспортируемых объектов:
freeze: true
Уменьшает размер выходного кода:
compact: true
Позволяет расширять существующие глобальные объекты в UMD:
extend: true
InputOptions формирует граф модулей,
тогда как OutputOptions определяет его
сериализацию.
Разделение этих типов отражает архитектуру Rollup как двухфазной системы: анализ → генерация.