TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Рейтинг: 56.6% · 5 голосов
Frontend и backend разработка: JavaScript, TypeScript, React, Next.js, Vue, Node.js, PHP, REST и GraphQL API, вёрстка HTML/CSS и современные веб-приложения.
Ответить
Аватара пользователя
grumpylurker
Сообщения: 63
Зарегистрирован: 15 май 2026, 01:41

TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение grumpylurker »

TypeScript 5.9 после апдейта развалил типы в монорепе, и я не понимаю это я что то делаю не так или они опять поменяли поведение moduleResolution. У нас pnpm-воркспейс, штук 12 пакетов, общий tsconfig с moduleResolution bundler. После апдейта с 5.4 на 5.9 половина внутренних импортов между пакетами вдруг покраснела, типа cannot find module хотя сборка vite проходит и в рантайме все работает. Ощущение что ts перестал резолвить exports из package.json как раньше. Кто разбирался, что у них там в очередной раз изменилось с резолюшеном модулей.
👍 ❤️1 🔥 😄 🤔
✔ Лучший ответ сформирован автоматически — burneddeadlock
@grumpylurker, по делу, чтобы ОП и те кто нагуглит закрыли вопрос. симптом cannot find module между пакетами монорепы при работающей сборке это почти всегда несоответствие как ts резолвит модуль и как реально лежат файлы. разбор по шагам. первое, проверь moduleResolution, для проекта что собирается бандлером (vite, esbuild) это bundler, и тогда ts ОБЯЗАН читать поле exports из package.json внутре…
Перейти к ответу →
Аватара пользователя
nerd_max
Сообщения: 34
Зарегистрирован: 11 май 2026, 14:33

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение nerd_max »

не ts тебя сломал а скорее всего твои package.json во внутренних пакетах без нормального exports поля или без types в нем. с bundler-резолюшеном ts строго читает exports, и если ты раньше жил на typesVersions или на главном types в корне, новый ts мог перестать это подхватывать. покажи exports одного из пакетов, угадаю проблему за минуту
👍2 ❤️2 🔥 😄 🤔
Аватара пользователя
Rhemix
Сообщения: 71
Зарегистрирован: 12 май 2026, 03:33

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение Rhemix »

у меня была ровно эта боль. дело в том что bundler-резолюшен требует чтобы в exports был отдельный ключ types и он шел ПЕРВЫМ в объекте условий, до import и default. если types стоит после import, ts его может проигнорить и сказать cannot find module. поправил порядок ключей в exports у всех пакетов, краснота ушла вся
👍 ❤️1 🔥 😄1 🤔
Аватара пользователя
rgarcia
Сообщения: 9
Зарегистрирован: 28 май 2026, 02:26

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение rgarcia »

nerd_max писал(а):ключ types и он шел ПЕРВЫМ в объекте условий, до import и default
плюсую, это классические грабли и не только на 5.9. порядок условий в exports это не косметика, резолвер идет сверху вниз и берет первое совпадение. если default стоит выше types, он матчнется раньше и до типов дело не дойдет. народ постоянно на это напарывается и думает что тулинг сломался
👍 ❤️1 🔥1 😄1 🤔
Аватара пользователя
leochir
Сообщения: 20
Зарегистрирован: 11 май 2026, 01:44

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение leochir »

а зачем вам вообще bundler если монорепа собирается через project references? у нас node16 резолюшен + references, ts сам строит граф зависимостей между пакетами, типы между пакетами видны без танцев с exports. bundler хорош для приложения которое собирает vite, но для библиотечной монорепы references надежнее имхо
👍 ❤️1 🔥2 😄 🤔
Аватара пользователя
sergeyserov
Сообщения: 56
Зарегистрирован: 12 май 2026, 05:59

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение sergeyserov »

честно я устал от того что они каждые пару версий что то крутят в резолюшене. то node, то node16, то nodenext, то bundler, держи в голове матрицу совместимости. просто закрепляй версию ts в монорепе и не апай по renovate автоматом, фронт это не та область где autoupdate мажорки тулинга безопасен
👍 ❤️1 🔥1 😄 🤔
Аватара пользователя
burneddeadlock
Сообщения: 24
Зарегистрирован: 21 май 2026, 15:44

Re: TypeScript 5.9 и moduleResolution bundler опять переломали типы в монорепе

Сообщение burneddeadlock »

✔ Лучший ответ — сформирован автоматически
@grumpylurker, по делу, чтобы ОП и те кто нагуглит закрыли вопрос. симптом cannot find module между пакетами монорепы при работающей сборке это почти всегда несоответствие как ts резолвит модуль и как реально лежат файлы. разбор по шагам. первое, проверь moduleResolution, для проекта что собирается бандлером (vite, esbuild) это bundler, и тогда ts ОБЯЗАН читать поле exports из package.json внутренних пакетов, старый главный ключ types в корне он больше не смотрит так как раньше. второе, в каждом внутреннем пакете в exports добавь условие types и поставь его ПЕРВЫМ, до import и default, иначе резолвер уйдет в import раньше чем дойдет до типов. пример структуры: точка вход, внутри сначала types на d.ts, потом import на js, потом default. третье, если пакеты не пребилдятся а ты импортишь напрямую исходники, заведи условие development или просто укажи types прямо на ts-исходник, тогда правки видны без пересборки. четвертое, для библиотечной монорепы реально стоит посмотреть в сторону project references, тогда граф типов строит сам ts и часть боли с exports уходит. у меня после апа на 5.9 покраснело ровно из за порядка ключей, types стоял последним, переставил первым во всех 12 пакетах через скрипт, все позеленело. сборка работала потому что vite резолвит по своим правилам и ему на порядок ts-условий плевать, отсюда и расхождение которое тебя путает. так что ты не сломал ничего, просто 5.9 строже к корректному exports.
👍1 ❤️ 🔥 😄 🤔1
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Веб-разработка»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей