From 7a0227244b50985a806a459b393e38edf0bb9c29 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 7 Mar 2026 12:10:50 +0300 Subject: [PATCH] Fix predictor --- astro.config.mjs | 3 +++ spec/predictor.md | 54 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 spec/predictor.md diff --git a/astro.config.mjs b/astro.config.mjs index 72b2fb0..f4f12e8 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -17,5 +17,8 @@ export default defineConfig({ }, vite: { plugins: [tailwindcss()], + optimizeDeps: { + include: ['@anwinged/predictor'], + }, }, }); diff --git a/spec/predictor.md b/spec/predictor.md new file mode 100644 index 0000000..e69b2ba --- /dev/null +++ b/spec/predictor.md @@ -0,0 +1,54 @@ +# Модернизация пакета @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` и т.п.).