Как установить максимальный размер старого пробела для компилятора машинописного текста (tsc)?

#javascript #node.js #typescript

Вопрос:

У меня не tsc получается выполнить работу в gitlab ci с FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

Сценарий, который я запускаю, таков tsc -p test/tsconfig.json --noEmit

То, что я пробовал до сих пор, — это увеличить max-old-space-size с помощью:

  1. cross-env NODE_OPTIONS=--max-old-space-size=8192 yarn print:heapsize amp;amp; tsc -p test/tsconfig.json --noEmit
  2. cross-env NODE_OPTIONS='--max-old-space-size=8192' yarn print:heapsize amp;amp; tsc -p test/tsconfig.json --noEmit (просто дополнительные кавычки вокруг var)
  3. node --max-old-space-size=8192 ./node_modules/.bin/tsc -p test/tsconfig.json --noEmit

Варианты № 1 и № 2 не работают, и № 3 работает нормально, но мне кажется неправильным запускать двоичный файл и передавать параметры в node cli

Итак, мой вопрос в том, как мне настроить max-old-spce-size tsc via env variables или, может быть, есть другой хороший способ сделать это?

yarn print:heapsize это скрипт, который я использовал для проверки текущего размера — он показывает 8 ГБ как для #1, так и для #2 вот он:

"print:heapsize": "node -e "console.log('🔥 Current heap size:', (require('v8').getHeapStatistics().total_available_size / 1024 / 1024 / 1024).toFixed(2), 'Gb')""

и вот результат введите описание изображения здесь

Ответ №1:

Первые два варианта завершаются ошибкой, потому что переменная среды NODE_OPTIONS=--max-old-space-size=8192 применяется только к первой команде ( yarn print:heapsize ), которая находится до amp;amp; этого .

Если вы удалите yarn print:heapsize amp;amp; среду, она будет применена к команде компиляции, как и ожидалось:

cross-env NODE_OPTIONS=--max-old-space-size=8192 tsc -p test/tsconfig.json --noEmit

Комментарии:

1. на самом деле я начал с этого и поднял до 8192, затем 10240, а затем 16384 — только после того, как он продолжал терпеть неудачу, я добавил print:heapsize

2. но, может быть, я приковал его чем-то другим, что время перепроверит, спасибо!

3. вы совершенно правы, в моих первых попытках была командная цепочка, tyvm!

4. @godblessstrawberry Добро пожаловать!