Skip to content

Очистка при обновлении: ExtJS-ассеты и config/mgr - #728

Merged
biz87 merged 2 commits into
betafrom
fix/issue-716-obsolete-assets-config
Sep 15, 2026
Merged

biz87 merged 2 commits into
betafrom
fix/issue-716-obsolete-assets-config

Conversation

@Ibochkarev

Copy link
Copy Markdown
Member

Описание

После #709 резолвер чистит obsolete-процессоры, но раздел assets был пуст. На обновлённых сайтах оставались удалённые ExtJS-файлы и JSON из config/mgr.

В obsolete_package_files.php добавлены 116 путей assets и 7 config/mgr/**/*.json по истории git (не только коммит d5aed2c2). Smoke-тест проверяет exact-match обоих списков и что пути не лежат в текущем дереве (кроме whitelist Autocomplete до #690).

Тип изменений

  • Исправление бага (non-breaking change)
  • Новая функциональность (non-breaking change)
  • Breaking change (изменение, ломающее обратную совместимость)
  • Рефакторинг (без изменения функциональности)
  • Документация
  • Другое (опишите): tech-debt / cleanup on package upgrade

Связанные Issues

Closes #716

Связано с #704 / #709 / #690.

Как это было протестировано?

php -l core/components/minishop3/config/obsolete_package_files.php
php -l core/components/minishop3/tests/ObsoletePackageFilesTest.php
# exit 0

php core/components/minishop3/tests/ObsoletePackageFilesTest.php
# OK ObsoletePackageFilesTest

cd core/components/minishop3
./vendor/bin/phpunit tests/Unit/Utils/ObsoletePackageFilesTest.php
# OK (11 tests, 42 assertions)

Список сверялся с git log --diff-filter=D --name-only -- assets/components/minishop3 core/components/minishop3 (без src/Processors, без путей, которые есть в HEAD).

  • Ручное тестирование
  • Автоматические тесты (smoke + unit ObsoletePackageFiles)
  • Тестирование на разных версиях PHP/MODX

Конфигурация тестирования:

  • MiniShop3: fix/issue-716-obsolete-assets-config от beta
  • MODX: n/a (list + unit)
  • PHP: 8.4.23

Скриншоты (если применимо)

До После
n/a n/a

Чеклист

  • Код соответствует стилю проекта
  • Добавлены/обновлены комментарии в сложных местах
  • Изменения не ломают существующую функциональность
  • Лексиконы добавлены на двух языках (ru/en) — не требуются
  • PHPStan проходит без новых ошибок (composer stan / CI job PHPStan)
  • ESLint проходит без ошибок (npm run lint:ci для Vue) — Vue не трогали
  • Обновлён CHANGELOG.md (для значимых изменений) — на релизе

Дополнительные заметки

  • Resolver и ObsoletePackageFiles не менялись: уже чистили оба корня.
  • Другие удалённые config/* вне config/mgr (например page JSON) — вне scope, отдельный тикет при необходимости.
  • Autocomplete остаётся в whitelist «ещё в дереве» до Remove unused Product Autocomplete processor #690.

@Ibochkarev Ibochkarev added priority: low Низкий приоритет, когда будет время tech-debt Maintainability / refactor / architecture debt labels Sep 14, 2026
@Ibochkarev
Ibochkarev requested a review from biz87 September 14, 2026 17:00
@biz87

biz87 commented Sep 15, 2026

Copy link
Copy Markdown
Member

Проверил. Список собран аккуратно: независимый прогон git log --diff-filter=D --name-only --no-renames по assets/components/minishop3 и config/mgr совпал на 123 пути. Резолвер со списком прогнал на dev-сайте: заглушки по всем 123 путям удалены, отклонённых нет, остальное дерево сайта не изменилось. Путей, которые попадают в собираемый пакет, в списке нет — Vite сейчас пишет только в vue-dist, а css/mgr/utilities и js/mgr/utilities остались от старой сборки. Но есть группа файлов, которую удалять пока нельзя.

Блокер: файлы, на которые ссылается ms3_frontend_assets

js/web/modules/form.js, request.js, callback.js, cart.js, customer.js, order.js входили в значение по умолчанию ms3_frontend_assets в 1.0.0-alpha и 1.0.0-alpha.1 (git show 1.0.0-alpha:_build/elements/settings.php); из значения по умолчанию они ушли в 1.0.0-alpha.2 (55353d2c).

  • Настройки при обновлении не перезаписываются: 'settings' => false в _build/config.inc.php.
  • Четыре миграции, которые трогают этот ключ (add_product_card_ui, add_quantity_ui, add_selectors, add_auth_ui), в up() только добавляют пути, старые не убирают.
  • MiniShop3::registerFrontend (src/MiniShop3.php, ~127–148) для каждой записи настройки делает filemtime() и регистрирует <script src>.

На сайте, установленном с 1.0.0-alpha или 1.0.0-alpha.1, у которого настройку не правили вручную, после обновления с этим списком файлы, на которые ссылается настройка, исчезнут: браузер получит 404, а filemtime() будет писать warning на каждой странице витрины. Что именно сейчас работает на витрине таких сайтов, я не проверял — но удалять подключённые файлы молча нельзя, резолвер отработает при обновлении автоматически и вернуть их нечем.

У order-cancel.js и customer-addresses.js такого риска нет: они подключались <script src> из чанков, а чанки обновляются ('chunks' => true) раньше, чем выполняется резолвер.

Варианты:

  1. В резолвере не удалять файл assets, если его путь встречается в текущем значении ms3_frontend_assets (с подстановкой [[+jsUrl]]/[[+cssUrl]]), и писать WARN. Это закрывает и эту группу, и любые будущие случаи, когда пользователь сам подключил файл из пакета через настройку.
  2. Убрать эти шесть путей из списка, пока нет миграции, которая чистит их из настройки.

Я бы сделал первый вариант.

Полнота

js/web/modules/auth-forms.js в списке нет. Он был в релизах начиная с 1.0.0-beta1, удалён в fcb0b677 и подключался <script src> из чанка ms3_customer_unauthorized.tpl — удалять его безопасно, стоит добавить.

Package upgrades leave deleted files on disk. Extend obsolete_package_files
with assets and config/mgr paths from git history, and assert neither bucket
still ships in the tree.
Sites installed on 1.0.0-alpha still reference the old web modules in that
setting, which upgrades do not overwrite. Skip those files and warn instead
of 404s. Add auth-forms.js, which chunks already drop before the resolver.
@Ibochkarev
Ibochkarev force-pushed the fix/issue-716-obsolete-assets-config branch from 9c9ac62 to a7af430 Compare September 15, 2026 08:27
@Ibochkarev

Copy link
Copy Markdown
Member Author

Сделал первый вариант.

Резолвер не трогает assets, если путь есть в текущем ms3_frontend_assets после подстановки [[+jsUrl]] / [[+cssUrl]] / [[+assetsUrl]]. Пишет WARN. Так остаются и шесть модулей с alpha, и любые файлы, которые сами повесили через настройку.

js/web/modules/auth-forms.js добавлен в список: чанк обновляется раньше резолвера, риск 404 нет.

Smoke + PHPUnit ObsoletePackageFilesTest: 13 tests, 56 assertions.

@biz87
biz87 merged commit ee690c9 into beta Sep 15, 2026
6 checks passed
@Ibochkarev
Ibochkarev deleted the fix/issue-716-obsolete-assets-config branch September 16, 2026 06:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority: low Низкий приоритет, когда будет время tech-debt Maintainability / refactor / architecture debt

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Очистка при обновлении: удалённые ExtJS-ассеты и config/mgr остаются на сайтах

2 participants