В режиме наблюдения Rollup поддерживает непрерывную реакцию на
изменения исходного кода и связанных ресурсов. Одним из внутренних
механизмов, обеспечивающих корректную работу watch-режима, является
список файлов, за которыми следит конкретная сборка. Этот список
доступен через bundle.watchFiles и отражает реальный набор
зависимостей, влияющих на результат сборки.
bundle.watchFilesbundle.watchFiles представляет собой массив строк,
содержащих абсолютные пути ко всем файлам, которые были задействованы в
процессе формирования текущего бандла. Эти файлы считаются критическими
для пересборки: любое изменение в них должно приводить к повторному
запуску процесса bundle.generate() или
bundle.write() в watch-режиме.
Ключевая особенность заключается в том, что список формируется динамически во время анализа графа модулей, а не задаётся пользователем напрямую. Rollup строит его на основе:
Таким образом, bundle.watchFiles отражает итоговую
структуру зависимостей, а не конфигурацию сборки.
Во время выполнения rollup.rollup() происходит
построение графа модулей. На этом этапе Rollup последовательно:
import-выражения.Каждый модуль в графе сопровождается метаданными, включая:
Именно из этих данных и формируется
bundle.watchFiles.
Важно различать bundle.watchFiles и input
конфигурацию:
input задаёт только начальные точки входа;watchFiles содержит все транзитивные
зависимости, включая глубокие уровни импорта.Например, при такой структуре:
main.js → utils.js → helpers.js → constants.js
input будет содержать только main.js, тогда
как bundle.watchFiles включит:
Плагины Rollup могут существенно влиять на состав
bundle.watchFiles. Это происходит через добавление
дополнительных зависимостей в процессе трансформации модулей.
this.addWatchFileПлагины могут явно регистрировать дополнительные файлы, которые не участвуют в импортах, но должны отслеживаться:
При вызове:
this.addWatchFile(path)
Rollup включает указанный файл в bundle.watchFiles.
Виртуальные модули (создаваемые через плагины без физического файла на диске) не имеют собственного пути в файловой системе, однако могут зависеть от реальных файлов.
В этом случае:
watchFiles,addWatchFile, попадают.Это позволяет поддерживать корректную реакцию watch-режима даже при полностью программной генерации кода.
В watch-режиме (rollup.watch) список
bundle.watchFiles используется для:
При изменении любого файла из списка происходит:
bundle.watchFiles.Таким образом, список является переменным состоянием между итерациями сборки.
Содержимое bundle.watchFiles не является стабильным
между сборками. Оно может изменяться в зависимости от:
import()),Например, если плагин в одной итерации добавляет дополнительный файл
через addWatchFile, а в другой нет, итоговый список будет
различаться.
Tree-shaking влияет на состав графа модулей, а значит и на
bundle.watchFiles.
Если модуль:
то его файл может отсутствовать в итоговом списке watchFiles, если Rollup определит, что он не влияет на результат сборки.
Rollup использует внутренний кэш модулей для ускорения повторных сборок. При этом:
watchFiles могут расширять кэш,Это снижает стоимость пересборки при больших проектах, где граф модулей содержит сотни или тысячи файлов.
Хотя bundle.watchFiles чаще используется внутри Rollup и
плагинов, его поведение критично для:
В сложных сборочных пайплайнах этот список фактически становится отражением реального “живого” графа проекта в конкретный момент времени.
При использовании нескольких входных точек или при сборке нескольких бандлов:
watchFiles,Это важно при монорепозиториях и shared-зависимостях, где изменение одного файла может запускать пересборку сразу нескольких бандлов.
Список bundle.watchFiles не предназначен для прямого
изменения. Попытки модифицировать его вручную не влияют на поведение
Rollup, так как он является результатом внутреннего анализа графа, а не
входным параметром.
Также следует учитывать: