Сборка завершается ошибкой: FATAL ERROR: Reached heap limit, JavaScript heap out of memory

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

Node.js по умолчанию ограничивает память кучи. Крупные проекты при сборке могут её исчерпать. Увеличьте лимит параметром --max-old-space-size (например, NODE_OPTIONS=--max-old-space-size=4096), но и поищите причину: утечки в плагинах, слишком крупные зависимости, отсутствие кэша, нехватка памяти на сервере сборки.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение
  4. Если не помогло
  5. Как увеличить лимит
  6. Как снизить потребление

#Что означает ошибка

Сообщение
FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory
По-русскиСборка Node.js/webpack/vite остановлена: процессу не хватило памяти.

Сообщение «JavaScript heap out of memory» при сборке проекта (webpack, Vite, Next.js, tsc) означает, что процесс Node.js исчерпал лимит памяти кучи. Сборка больших проектов требует больше памяти, чем доступно по умолчанию.

Увеличение лимита — быстрое решение, но стоит также уменьшить потребление памяти самой сборкой.

Сборка держит в памяти граф модулей и исходные карты. Когда объём превышает лимит кучи V8, процесс завершается.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Лимит памяти Node слишком малКрупный проект.Падение на больших сборках; локально хватает.Увеличьте --max-old-space-size.
Нехватка памяти на сервере сборкиКонтейнер CI ограничен по памяти.Падает только в CI.Увеличьте ресурсы CI или уменьшите параллелизм.
Тяжёлые плагины и source mapsПолные карты исходников, минификация.Падение на этапе минификации.Отключите или упростите source maps в продакшен-сборке.
Циклические зависимости или утечкаОшибка в конфигурации.Память растёт без остановки.Профилируйте сборку, обновите инструменты.

#Пошаговое решение

  1. Увеличьте лимит памятиВ терминале проекта (VS Code → «Терминал» → «Новый терминал») запустите штатную команду сборки, например npm run build, и найдите в выводе FATAL ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory. Это именно исчерпание кучи Node.js, а не всегда физической оперативной памяти. Выполните node -v и node -p "process.arch", посмотрите package.json и сценарий сборки. Сохраните точный лог, не публикуя секреты из переменных окружения.
  2. Проверьте памятьПрежде чем повышать лимит, проверьте доступную оперативную память и ограничения процесса: Windows — Ctrl+Shift+Esc → «Производительность» → «Память», macOS — «Мониторинг системы» → «Память», Linux — free -h; для контейнера проверьте его лимит памяти в конфигурации. Для теста на машине с достаточным запасом задайте переменную на один запуск: Linux/macOS NODE_OPTIONS=--max-old-space-size=4096 npm run build; в PowerShell $env:NODE_OPTIONS='--max-old-space-size=4096'; npm run build, затем Remove-Item Env:NODE_OPTIONS. 4096 — пример в МиБ, не превышайте возможности машины и не ставьте значение наугад в общей среде.
    Linux · Терминал (Bash)Команда
    Задаёт лимит 4 ГБ для процесса Node. Должно хватать физической памяти. В Windows: set NODE_OPTIONS=--max-old-space-size=4096 отдельной командой.
    NODE_OPTIONS=--max-old-space-size=4096 npm run build
  3. Отключите source mapsЕсли сборка всё ещё исчерпывает кучу, найдите этап, на котором растёт память (транспиляция, создание карт исходного кода, минификация). Откройте конфигурацию вашего сборщика и по его официальному руководству временно отключите генерацию production source maps только для тестовой сборки. В Webpack это настройка devtool, в Vite — build.sourcemap; другие инструменты используют другие параметры. Повторите сборку и сравните использование памяти, учитывая, что отсутствие карт ухудшает отладку.
  4. Обновите инструментыПроверьте версии инструментов без изменения зависимостей: npm ls --depth=0 и npm outdated. Сравните совместимость Node.js с версией сборщика по документации проекта. Не запускайте бездумно npm update или переход на новый основной выпуск — изменится граф зависимостей. Если обновление действительно требуется, создайте отдельную ветку Git, сохраните package-lock.json, установите совместимые версии и прогоните тесты; при регрессии откатите отдельный коммит.
  5. Очистите кэшПри подозрении на испорченный кэш сначала остановите сборку, а затем очистите только документированный кэш используемого сборщика, например конкретный каталог node_modules/.cache у Webpack, если он существует. Если проект использует npm и есть package-lock.json, npm ci пересоздаст node_modules, удалив этот каталог; это отдельная операция, которую проводят после сохранения важных локальных изменений. Снова запустите сборку; если рост памяти повторяется даже на достаточном лимите, выполните профилирование Node и проверьте плагины на утечки.

#Если не помогло

Не ставьте лимит больше доступной памяти: система начнёт использовать подкачку и сборка замедлится. В CI закрепите значение в конфигурации задачи.

#Как увеличить лимит

Лимит кучи можно временно повысить только при достаточной физической памяти и лимитах контейнера/сборочного агента. Синтаксис отличается в PowerShell, cmd и оболочках Linux/macOS, поэтому используйте команду для вашей системы из шагов выше; после эксперимента верните исходные параметры.

#Как снизить потребление

Оптимизация сборки зависит от инструмента: изучите отчёт расхода памяти и конфигурацию Webpack, Vite, Next.js или TypeScript. Возможные меры — сократить зависимости, изменить построение карт исходного кода, проверить память плагинов и кэширование. Параметры productionSourceMap, sourcemap, thread-loader, incremental и skipLibCheck не являются универсальными и способны изменить результат сборки; применяйте только поддерживаемые настройки вашего проекта.

Linux · Терминал (Bash)Команда
Сборка с лимитом памяти 4 ГБ.
NODE_OPTIONS=--max-old-space-size=4096 npm run build

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.