Путешествие по Next.js: от ошибок с not-found до форка next-runtime-env

Недавно столкнулся с интересным багом в Next.js. Если на странице not-found делать навигацию через router.push(pathname) , теряются все переменные окружения, которые мы инициализируем через библиотеку next-runtime-env (значение window.__ENV становится undefined ). В проекте мы используем next-runtime-env , так как придерживаемся подхода Build once, deploy many — это позволяет держать один Docker-образ, в который при запуске прокидываются нужные переменные окружения. Next.js из коробки не поддерживает такое поведение, ведь он хочет собирать env-переменные на этапе сборки приложения. Баг проявился на not-found странице, где у нас есть кнопка, позволяющая создать элемент в один клик, если что-то не найдено. Этот же компонент кнопки используется и на других страницах, и вот что интересно: на остальных страницах router.push(pathname) работает корректно, а на not-found — нет. Сначала я подумал, что проблема кроется в next-runtime-env . Наверное, библиотека переопределяется при обновлении страницы, потому что скрипт, устанавливающий переменные в window.__ENV , размещён в root layout. Я также пробовал версионировать Next.js, предполагая, что баг связан с определёнными версиями фреймворка, но это не дало результатов. В итоге, временным решением стало использование window.location.href , что предотвращало рефреш страницы и помогало сохранить переменные. Однако на этом история не закончилась.

https://habr.com/ru/articles/847586/

#nextjs #nextjs_14 #frontend #react #reactjs #serverside_rendering #app_router #nextruntimeenv

Путешествие по Next.js: от ошибок с not-found до форка next-runtime-env

Недавно столкнулся с интересным багом в Next.js. Если на странице not-found делать навигацию через router.push(pathname) , теряются все переменные окружения, которые мы инициализируем через библиотеку...

Хабр