Utiliser des variables d'environnement

Astro utilise le support intĂ©grĂ© de Vite pour les variables d’environnement, et vous permet d’utiliser n’importe laquelle de ses mĂ©thodes pour travailler avec elles.

Notez que si toutes les variables d’environnement sont disponibles dans le code cĂŽtĂ© serveur, seules les variables d’environnement prĂ©fixĂ©es par PUBLIC_ sont disponibles dans le code cĂŽtĂ© client pour des raisons de sĂ©curitĂ©.

.env
SECRET_PASSWORD=password123
PUBLIC_ANYBODY=there

Dans cet exemple, PUBLIC_ANYBODY (accessible via import.meta.env.PUBLIC_ANYBODY) disponible dans le code du serveur ou du client, tandis que SECRET_PASSWORD (accessible via import.meta.env.SECRET_PASSWORD) ne sera disponible que cÎté serveur.

Variables d’environnement par dĂ©faut

Titre de la section Variables d’environnement par dĂ©faut

Astro inclut quelques variables d’environnement par dĂ©faut :

  • import.meta.env.MODE : Le mode dans lequel tourne votre site. C’est development lorsque vous exĂ©cutez astro dev et production lorsque vous exĂ©cutez astro build.
  • import.meta.env.DEV : true si votre site tourne en dĂ©veloppement ; false sinon. Toujours l’opposĂ© de import.meta.env.PROD.
  • import.meta.env.BASE_URL : L’URL de base Ă  partir de laquelle votre site est servi. Elle est dĂ©terminĂ©e par l’option de configuration base (EN).
  • import.meta.env.SITE : C’est l’option site (EN) spĂ©cifiĂ©e dans le fichier astro.config de votre projet.
  • import.meta.env.ASSETS_PREFIX : Le prĂ©fixe pour les liens d’actifs gĂ©nĂ©rĂ©s par Astro si l’option de configuration build.assetsPrefix (EN) est dĂ©finie. Ceci peut ĂȘtre utilisĂ© pour crĂ©er des liens d’actifs non gĂ©rĂ©s par Astro.

Utilisez-les comme n’importe quelle autre variable d’environnement.

const isProd = import.meta.env.PROD;
const isDev = import.meta.env.DEV;

DĂ©finir des variables d’environnement

Titre de la section DĂ©finir des variables d’environnement

Les variables d’environnement peuvent ĂȘtre chargĂ©es Ă  partir des fichiers .env dans le rĂ©pertoire de votre projet.

Vous pouvez aussi attacher un mode (soit production soit development) au nom du fichier, comme .env.production ou .env.development, ce qui fait que les variables d’environnement ne prennent effet que dans ce mode.

Il suffit de crĂ©er un fichier .env dans le rĂ©pertoire du projet et d’y ajouter quelques variables.

.env
# Ceci ne sera disponible que lorsque vous lancerez le serveur !
DB_PASSWORD="foobar"
# Ceci sera disponible partout !
PUBLIC_POKEAPI="https://pokeapi.co/api/v2"

Pour plus d’informations sur les fichiers .env, voir la documentation de Vite (EN).

Vous pouvez Ă©galement ajouter des variables d’environnement lorsque vous exĂ©cutez votre projet :

FenĂȘtre du terminal
PUBLIC_POKEAPI=https://pokeapi.co/api/v2 npm run dev

Obtenir des variables d’environnement

Titre de la section Obtenir des variables d’environnement

Au lieu d’utiliser process.env, avec Vite vous utilisez import.meta.env, qui utilise la fonctionnalitĂ© import.meta ajoutĂ©e dans ES2020.

Par exemple, utilisez import.meta.env.PUBLIC_POKEAPI pour obtenir la variable d’environnement PUBLIC_POKEAPI.

// Quand import.meta.env.SSR === true
const data = await db(import.meta.env.DB_PASSWORD);
// Quand import.meta.env.SSR === false
const data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`);

Lorsque vous utilisez SSR, les variables d’environnement peuvent ĂȘtre accĂ©dĂ©es au moment de l’exĂ©cution en fonction de l’adaptateur SSR utilisĂ©. Avec la plupart des adaptateurs, vous pouvez accĂ©der aux variables d’environnement avec process.env, mais certains adaptateurs fonctionnent diffĂ©remment. Pour l’adaptateur Deno, vous utiliserez Deno.env.get(). Voir comment accĂ©der au runtime Cloudflare pour gĂ©rer les variables d’environnement lors de l’utilisation de l’adaptateur Cloudflare. Astro vĂ©rifiera d’abord l’environnement du serveur pour les variables, et si elles n’existent pas, Astro les cherchera dans les fichiers .env.

Par défaut, Astro fournit une définition de type pour import.meta.env dans astro/client.d.ts.

Bien que vous puissiez dĂ©finir plus de variables env personnalisĂ©es dans les fichiers .env.[mode], vous voudrez peut-ĂȘtre obtenir l’autocomplĂ©tion TypeScript pour les variables env dĂ©finies par l’utilisateur qui sont prĂ©fixĂ©es par PUBLIC_.

Pour cela, vous pouvez créer un fichier env.d.ts dans src/ et configurer ImportMetaEnv comme ceci :

src/env.d.ts
interface ImportMetaEnv {
readonly DB_PASSWORD: string;
readonly PUBLIC_POKEAPI: string;
// plus de variables d'environnement...
}
interface ImportMeta {
readonly env: ImportMetaEnv;
}