Столкнулся с очень непонятной ситуацией. Наткнулся на гайдик, где показывается классно что можно создать error.tsx в корне проекта и ловить там ошибки, посылая их на страницу через, например throw new Error('Ошибка чтения файла');
Я уже обрадовался, классная штука, и правда ловит ошибки какие надо и где мне надо. Напихал их везде. И тут я решил сбилдить проект. А фишка в том, что в моем коде есть условие: если есть локальные переменные в Kubernetes, то делай одно. А если нет, то делай другое. И подкрепил я все этим вот throw new Error на каждом этапе.
И что получилось: throw new Error просто тупо игнорирует, что нужно переходить к else блоку, в случае если отсутствуют переменные окружения Kubernetes, и крашит билд выплевывая мне throw new Error из условия, которое должно было быть пропущенным.
Я почитал, что это нормальная история, что throw new Error крашит билд, типа оно для этого и создано чтобы отлавливать. Тогда как черт побери его использовать, если до деплоя на прод ошибка будет в 100% случаев?
А фишка в том, что в моем коде есть условие: если есть локальные переменные в Kubernetes, то делай одно. А если нет, то делай другое
Все эти переменные должны быть "стандартизированы" в рамках приложения, и приложение должно выбирать стратегию работы в зависимости от окружения. Например, для k8s настоящая база и куча переменных коннекта, а локально sqlite файл. Приложение дожно уметь работать с обоими вариантами, и плясать от некой переменной окружения RUNTIME_ENV, которая может принимать значения вроде k8s-stage | k8s-prod | local, и уже дальше от них плясать.