2.6 KiB
2.6 KiB
Модернизация пакета @anwinged/predictor
Проблема
Пакет собран через webpack в UMD-формат с eval() внутри чанков. Это создает проблемы при использовании в современных проектах на Vite/Astro:
- UMD-обертка использует
window— падает в SSR/Node.js окружении. eval()в бандле — нарушает Content Security Policy, мешает Vite анализировать зависимости.- Нет ESM-экспорта — в
package.jsonтолько поле"main", указывающее на UMD-бандл. Vite не может подключить пакет без принудительного пре-бандлинга (optimizeDeps.include). - Нет поля
"exports"— современные бандлеры не могут автоматически выбрать подходящий формат. - 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
{
"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 и т.п.).