Метод bundle.close() относится к завершающей стадии
работы с экземпляром бандла, возвращаемого функцией
rollup.rollup(). Его основная задача — корректное
освобождение ресурсов, которые могли быть заняты в процессе сборки,
особенно в режимах наблюдения (watch) или при использовании
плагинов, создающих долгоживущие соединения, файловые дескрипторы или
кеши.
Rollup не всегда ограничивается однократной синхронной сборкой. В реальных сценариях он часто работает как долгоживущий процесс, и именно в таких случаях корректное закрытие бандла становится критически важным.
bundleПосле вызова:
const bundle = await rollup.rollup(inputOptions);
создаётся объект, содержащий скомпилированный граф модулей и внутреннее состояние сборщика. Далее обычно выполняется один из методов:
await bundle.generate(outputOptions);
await bundle.write(outputOptions);
или многократные вызовы в режиме watch.
На этом этапе Rollup может удерживать:
Метод bundle.close() завершает этот жизненный цикл.
bundle.close()bundle.close() инициирует процедуру очистки всех
ресурсов, связанных с конкретным экземпляром сборки.
Ключевые действия:
Если сборка была создана через rollup.watch(), либо
плагины зарегистрировали наблюдатели файлов, bundle.close()
завершает:
Rollup-плагины могут создавать долгоживущие ресурсы:
bundle.close() даёт плагинам возможность корректно
завершить работу через соответствующие lifecycle hooks (если они
реализованы).
Хотя JavaScript использует сборщик мусора, Rollup может удерживать:
После вызова bundle.close() эти структуры становятся
недоступными и могут быть освобождены GC.
Rollup может иметь асинхронные задачи:
close() завершает или корректно дожидается завершения
таких операций.
bundle.close()В простом сценарии:
const bundle = await rollup.rollup(inputOptions);
await bundle.write(outputOptions);
await bundle.close();
Даже если сборка разовая, вызов полезен при наличии плагинов, создающих внешние ресурсы.
В автоматизированных процессах:
В таких случаях отсутствие close() может приводить к
зависанию процесса.
Если Rollup встроен в:
то bundle.close() используется для:
bundle.close()Игнорирование закрытия бандла может приводить к следующим последствиям:
Особенно при частых пересборках:
Если используется watch-режим:
Некоторые плагины не освобождают ресурсы автоматически:
rollup.watch()Важно различать:
bundle.close()watcher.close() (возвращается
rollup.watch())В watch-режиме:
const watcher = rollup.watch(inputOptions);
watcher.close();
Но внутри watcher создаёт bundle-экземпляры. В зависимости от версии
Rollup и плагинов, bundle.close() может вызываться
автоматически или требоваться вручную в пользовательских сценариях.
bundle.close()Метод возвращает Promise:
await bundle.close();
Это означает, что закрытие включает:
Игнорирование await может привести к незавершённой
очистке.
import { rollup } from 'rollup';
async function build() {
const bundle = await rollup({
input: 'src/index.js'
});
try {
await bundle.write({
file: 'dist/bundle.js',
format: 'esm'
});
} finally {
await bundle.close();
}
}
build();
Использование finally гарантирует закрытие даже при
ошибках сборки.
Плагины могут реагировать на закрытие через собственные механизмы
очистки. Хотя прямого универсального hook close в API
плагинов нет, закрытие бандла влияет на:
buildEndНекоторые плагины реализуют собственные cleanup-методы через внешние
API, и bundle.close() становится точкой их завершения.
В интеграциях Rollup как библиотеки:
bundle.close() становится частью управления жизненным
циклом инстансов сборки.
Типичная модель:
bundle.close()bundle.close(); // ошибка архитектуры
В этом случае очистка может не завершиться.
Повторный вызов:
await bundle.close();
await bundle.close();
может приводить к предупреждениям или no-op поведению, но в зависимости от версии и плагинов — к нестабильности.
Неправильный порядок:
await bundle.close();
await bundle.write(outputOptions);
прерывает процесс сборки и может оставить незавершённые задачи.
bundle.close() в архитектуре Rollup APIRollup API строится вокруг чёткого разделения стадий:
rollup.rollup)generate / write)close)bundle.close() формально завершает инстанс сборки,
переводя его из активного состояния в завершённое.
Это делает API предсказуемым в долгоживущих процессах и предотвращает накопление ресурсов при повторных сборках.