Обновлено:
Если вы правильно называете env в файле Dockerfile, но он по-прежнему не работает, вам необходимо установить его ПЕРЕД созданием проекта.
У меня возникли проблемы с настройкой и чтением переменных среды в проекте NextJS.
У меня есть два console logs:
console.info('env', process.env.NODE_ENV);
console.info('backend url', process.env.BACKEND_URL);
Запуск кода без каких-либо действий возвращает то, что я ожидал:
env development
backend url undefined
Экспорт таких переменных:
NODE_ENV=production
BACKEND_URL=url
Не только печатает предыдущие значения, но и отображает следующее сообщение в консоли:
⚠ В вашей среде вы используете нестандартное значение NODE_ENV. Это создает несоответствия в проекте и настоятельно рекомендуется против. Читать далее: https://nextjs.org/docs/messages/non-standard-node-env
Экспортируем вот так:
export NODE_ENV=production
export BACKEND_URL=url
Также печатает то же самое, включая предупреждение.
Запуск NodeJS вот так:
BACKEND_URL=url NODE_ENV=production npm run dev
Печатает то же самое. echoпри использовании переменных выводятся правильные значения.
Дело не только в console.infos, я пытаюсь использовать эти значения в других частях кода, и они действуют так, как будто эти значения по-прежнему являются development и undefined.
Я также попробовал использовать файл .env:
NODE_ENV=production
BACKEND_URL=url
Я вижу, что оно читается, потому что когда я запускаю сервер NextJS, я вижу следующее:
next dev -p 8080
▲ Next.js 14.1.4
- Local: http://localhost:8080
- Environments: .env
Если файл не существует, строка с надписью Environment: .env не отображается.
Наконец, я проверил ~/.bashrc и ~/.zshrc, и у них нет упоминаний NODE_ENV или BACKEND_URL.
Что может произойти?
Теперь я чувствую себя глупо. Спасибо! Если вы хотите опубликовать это как ответ, я приму это.
хаха спасибо! Рад слышать, что это может вам помочь!





Если вы вызываете переменные env во внешнем интерфейсе (я так понимаю), вам нужно добавить к переменным префикс NEXT_PUBLIC_.
Дополнительную информацию можно найти в официальном документе здесь — https://nextjs.org/docs/app/building-your-application/configuring/environment-variables#bundling-environment-variables-for-the-browser
Вам не нужно экспортировать переменные в файл .env.
Вы просто объявляете переменные следующим образом:
NEXT_PUBLIC_NODE_ENV=production
NEXT_PUBLIC_BACKEND_URL=https://nextjs.org/docs/messages/non-standard-node-env
Вам не нужно заключать значение переменной в кавычки, даже если это String.
P.S. В файле .env существует соглашение об именовании переменных: все идентификаторы переменных должны быть в верхнем регистре и иметь префикс "NEXT_PUBLIC_".
Затем вы можете использовать эти переменные в своем коде следующим образом:
...
process.env.NEXT_PUBLIC_BACKEND_URL
...
Самый важный момент: будьте осторожны и не делайте файл .env общедоступным, как обычные файлы.
Эй, если вы вызываете переменные
envво внешнем интерфейсе, вам нужно добавить к переменным префиксNEXT_PUBLIC_. Дополнительную информацию можно найти здесь — nextjs.org/docs/app/building-your-application/configuring/…