Fix predictor
This commit is contained in:
@@ -17,5 +17,8 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
vite: {
|
vite: {
|
||||||
plugins: [tailwindcss()],
|
plugins: [tailwindcss()],
|
||||||
|
optimizeDeps: {
|
||||||
|
include: ['@anwinged/predictor'],
|
||||||
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
54
spec/predictor.md
Normal file
54
spec/predictor.md
Normal file
@@ -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` и т.п.).
|
||||||
Reference in New Issue
Block a user