Похоже, что вы комбинируете два подхода, и это может быть причиной проблем.
Gatsby поставляется с поддержкой определения переменных среды в специфичных для среды файлах .env.[environment]
(например, .env.development
), при условии, что эти файлы находятся в корневаш проект (т.е. your-project/.env.development
). Документация для этой функции . Вы не должны установить или настроить dotenv
, чтобы это работало.
Другой подход заключается в использовании dotenv , что позволит вам использовать общий файл .env
. Затем вам нужно импортировать и настроить инструмент, который обычно выполняется в самой верхней строке gatsby-config.js
и выглядит следующим образом:
require("dotenv").config()
Обратите внимание, что вы не указываетеимя среды (например, development
) в этом сценарии, и вы не будете фиксировать файл .env
в своем хранилище.
Другая проблема, с которой вы можете столкнуться, заключается в том, что часть кода выполняется на стороне сервера с использованием Node, а часть - на стороне клиента (в браузере). Поскольку process.env
доступен только в Node, Гэтсби делает некоторую дополнительную работу, чтобы сделать его доступным в браузере. Мы не хотим, чтобы все этих переменных, которые часто содержат секреты, были предоставлены браузеру, поэтому Гэтсби копирует только те, чьи имена начинаются с GATSBY
. Наконец, в качестве побочного эффекта от того, что эти переменные копируются, вы должны явно ссылаться на них, чтобы ваша сборка работала:
// this is okay everywhere
const GATSBY_APP = process.env.GATSBY_APP
// this won't work in code that runs client-side, but will work
// in `gatsby-node.js` and other files that only run in Node
const { GATSBY_APP } = process.env