# Модернизация пакета @anwinged/predictor ## Проблема Пакет собран через webpack в UMD-формат с `eval()` внутри чанков. Это создает проблемы при использовании в современных проектах на Vite/Astro: 1. **UMD-обертка использует `window`** — падает в SSR/Node.js окружении. 2. **`eval()` в бандле** — нарушает Content Security Policy, мешает Vite анализировать зависимости. 3. **Нет ESM-экспорта** — в `package.json` только поле `"main"`, указывающее на UMD-бандл. Vite не может подключить пакет без принудительного пре-бандлинга (`optimizeDeps.include`). 4. **Нет поля `"exports"`** — современные бандлеры не могут автоматически выбрать подходящий формат. 5. **TypeScript-исходники не используются напрямую** — хотя `src/` лежит в пакете, точка входа ведет только на собранный `dist/predictor.js`. ## Что нужно изменить ### 1. Заменить webpack на tsc (или tsup/unbuild) Исходники уже на TypeScript. Достаточно компилировать их напрямую: - ESM-вариант: `dist/index.mjs` - CJS-вариант (опционально): `dist/index.cjs` - Типы: `dist/index.d.ts` Webpack для библиотеки из пяти файлов без внешних зависимостей избыточен. ### 2. Обновить package.json ```json { "type": "module", "main": "dist/index.cjs", "module": "dist/index.mjs", "types": "dist/index.d.ts", "exports": { ".": { "import": "./dist/index.mjs", "require": "./dist/index.cjs", "types": "./dist/index.d.ts" } }, "files": ["dist"] } ``` ### 3. Убрать привязку к `window` Текущий UMD-бандл передает `window` как глобальный объект. При сборке через tsc/tsup это уходит автоматически. ### 4. Убрать `eval()` Webpack в dev-режиме оборачивает модули в `eval()`. При переходе на tsc/tsup проблема исчезает. ## Результат После этих изменений пакет будет работать в Vite/Astro/Next.js без дополнительной конфигурации (`optimizeDeps.include`, `ssr.noExternal` и т.п.).