build(frontend): обновить UI-зависимости внутри текущих major и закрыть все advisory

Vue Router 4.1.6 -> 4.6.4, Pinia 2.0.33 -> 2.3.1, @vueuse/core 9 -> 13.9.0,
vue-i18n 9.0.0 -> 9.14.5, echarts 5.6 -> 6.1.0, vue-echarts 7 -> 8.1.0.

Pinia 3, Vue Router 5 и Vite 8 сознательно не берутся: ни один из них не даёт
проекту ничего, кроме номера версии, а Vite 8 — это переезд на Rolldown.

vue-i18n и echarts обновлены не ради свежести: `pnpm audit --prod` на базовой
линии показывал 4 moderate, из них GHSA-x8qp-wqqm-57ph (vue-i18n, исправлено в
9.14.5) и GHSA-fgmj-fm8m-jvvx (echarts XSS, исправлено в 6.1.0). Теперь
`pnpm audit --prod` чист.

Четвёртая advisory — GHSA-5m5x-9j46-h678 в el-link — исправленной версии не
имеет, но в продукте недостижима: el-link не используется ни в одном
представлении. pnpm audit анализа достижимости не делает, в отличие от
govulncheck, поэтому это приходится проверять руками.

VueUse 13 сломал сборку: `[auto-import] identifier toRef already defined with
vue`. Причина — авто-импорт всего @vueuse/core, то есть пятисот с лишним имён,
среди которых реэкспорты toRef и toValue. Список сужен до двух функций, которые
действительно используются без явного импорта; src/types/auto-imports.d.ts
сократился с 526 строк до 124.

Заодно включена генерация .eslintrc-auto-import.json: файл подключён через
extends в .eslintrc.cjs, но не генерировался, то есть перечислял глобальные
имена, которых в авто-импорте давно нет. Устаревший список молча отключает
предупреждение eslint об обращении к несуществующему имени.

bundle: 2 604 924 против 2 404 202 на базовой линии (+8%).
typecheck: 0, eslint: 0, go build с встроенным dist: OK.
This commit is contained in:
2026-08-30 07:14:43 +05:00
parent d2dea2debf
commit 7f4cc10d25
6 changed files with 338 additions and 933 deletions
+32 -2
View File
@@ -63,9 +63,39 @@ export default defineConfig((): UserConfig => {
}),
AutoImport({
// Auto import Vue helpers: ref, reactive, toRef, etc.
imports: ["vue", "@vueuse/core"],
//
// Из @vueuse/core берутся ПОИМЁННО только те функции, которые
// действительно используются без явного импорта, а не весь пакет.
//
// Причина не стилистическая. С `"@vueuse/core"` целиком в список
// авто-импорта попадает вся его публичная поверхность — более пятисот
// имён, — и на VueUse 13 сборка падает:
//
// [auto-import] identifier toRef already defined with vue
//
// VueUse реэкспортирует `toRef` и `toValue`, и они конфликтуют с
// одноимёнными функциями Vue. Разрешать конфликт порядком записей в
// массиве значило бы решать вопрос «какой из двух toRef здесь имеется в
// виду» невидимо для читателя файла.
//
// Побочный эффект — src/types/auto-imports.d.ts сокращается с 526 строк
// до размера, который можно прочитать глазами.
imports: [
"vue",
{
"@vueuse/core": ["useVModel", "useFullscreen"],
},
],
eslintrc: {
enabled: false, // Default `false`
// Включено намеренно. Файл перечисляет глобальные имена для eslint и
// подключается через `extends` в .eslintrc.cjs, но генерация была
// выключена — то есть список жил своей жизнью и расходился со
// списком авто-импортов при каждом его изменении.
//
// Устаревшие записи здесь не безобидны: eslint перестаёт сообщать об
// обращении к имени, которого больше нет в авто-импорте, и ошибка
// доезжает до typecheck или до рантайма вместо линтера.
enabled: true,
filepath: "./.eslintrc-auto-import.json", // Default `./.eslintrc-auto-import.json`
globalsPropValue: true, // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
},