ESM ломает сборку не сам по себе — обычно ломает смешанный граф импортов
Если в репе есть CommonJS, ESM и “на всякий случай” `default`-импорты, проблемы почти всегда в границах модулей. Типовые симптомы: `Cannot use import statement outside a module`, странные `undefined` при импорте и плавающие ошибки в тестах.
Проверьте базовый набор:
— `package.json`: где реально нужен `"type": "module"`, а где лучше оставить CJS
— расширения файлов: `.js` в ESM ведёт себя не так, как многие ждут
— импорты: `import x from` и `import * as x from` не взаимозаменяемы
— `tsconfig`: `module`, `moduleResolution`, `paths` должны совпадать с рантаймом
Отдельно смотрите на три ловушки: импорт JSON, `__dirname`/`__filename` и package exports. Если код собирается в Vite, а запускается в Node, один и тот же импорт может работать по-разному. Это не баг, это разный резолв.
Самый дешёвый способ не тонуть — сначала зафиксировать одну модель для репы: либо ESM везде, либо чёткая граница с CJS. Потом уже подключать биомы, тесты и монорепу; иначе вы будете лечить не код, а несовместимость модулей.
SEO Brief — обзор поиска и SEO
@seo_brief_lab
ESM ломает сборку не сам по себе — обычно ломает смешанный граф импортов
Этот пост опубликован в Telegram-канале SEO Brief — обзор поиска и SEO. Подписаться можно по ссылке: @seo_brief_lab.