Использование переменных окружения
Astro использует встроенную в Vite поддержку переменных окружения, и позволяет вам использовать любые его методы для работы с переменными.
Обратите внимание, что, хотя все переменные окружения доступны в коде на стороне сервера, только переменные с префиксом PUBLIC_ доступны на стороне клиента в целях безопасности.
SECRET_PASSWORD=password123PUBLIC_ANYBODY=thereВ этом примере, PUBLIC_ANYBODY (доступная через import.meta.env.PUBLIC_ANYBODY) будет доступна в серверном и клиентском коде, в то время, как SECRET_PASSWORD (доступная через import.meta.env.SECRET_PASSWORD) будет существовать только на стороне сервера.
.env файлы не загружаются внутри конфигурационных файлов (EN).
Переменные окружения по умолчанию
Astro включает в себя несколько готовых переменных окружения:
import.meta.env.MODE: Режим в котором ваш сайт сейчас запущен. Этоdevelopmentпри запуске с помощьюastro devиproductionпри запуске с помощьюastro build.import.meta.env.PROD:trueесли ваш сайт работает в продакшн режиме;falseв другом случае.import.meta.env.DEV:trueесли ваш сайт работает в режиме разработки;falseв другом случае. Всегда противоположноimport.meta.env.PROD.import.meta.env.BASE_URL: Базовый URL, с которого обслуживается ваш сайт. Определяется опциейbaseконфига (EN).import.meta.env.SITE: Устанавливается опциейsite(EN) указанной вastro.configвашего проекта.
Настройка переменных окружения
.env файлы
Переменные окружения могут быть загружены с помощью .env файлов из директории вашего проекта.
Вы также можете задать режим (production или development) в имени файла, например, .env.production или .env.development, что сделает ваши переменные доступными только в заданном режиме.
Просто создайте .env файл в директории проекта и добавьте в него переменные:
# Будет доступна только на стороне сервера!DB_PASSWORD="foobar"# Будет доступна везде!PUBLIC_POKEAPI="https://pokeapi.co/api/v2"Дополнительные сведения о .env файлах, приведены в документации Vite.
Используя CLI
Вы также можете добавить переменные окружения при запуске проекта:
POKEAPI=https://pokeapi.co/api/v2 npm run devPOKEAPI=https://pokeapi.co/api/v2 pnpm run devPOKEAPI=https://pokeapi.co/api/v2 yarn run devПеременные, заданные таким способом, будут доступны везде в рамках вашего проекта, включая клиент.
Получение переменных окружения
Вместо использования process.env, в Vite вы работаете с import.meta.env, которая использует функцию import.meta добавленную в ES2020.
For example, use import.meta.env.PUBLIC_POKEAPI to get the PUBLIC_POKEAPI environment variable.
// When import.meta.env.SSR === trueconst data = await db(import.meta.env.DB_PASSWORD);
// When import.meta.env.SSR === falseconst data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`);Поскольку Vite статически заменяет import.meta.env, вы не сможете получить к нему доступ с помощью динамических ключей, таких как import.meta.env[key].
IntelliSense для TypeScript
По умолчанию, Astro предоставляет определение типа для import.meta.env в файле astro/client.d.ts.
В то время, как вы объявляете переменные окружения в .env.[mode] файлах, вы можете захотеть получить поддержку TypeScript IntelliSense для пользовательских переменных, которые имеют префикс PUBLIC_.
Для достижения этой цели, вы можете создать файл env.d.ts в каталоге src/ и настроить ImportMetaEnv следующим образом:
interface ImportMetaEnv { readonly DB_PASSWORD: string; readonly PUBLIC_POKEAPI: string; // more env variables...}
interface ImportMeta { readonly env: ImportMetaEnv;}