Utiliser des variables d'environnement
Astro utilise Vite pour les variables dâenvironnement, et permet dâutiliser nâimporte quelle mĂ©thode de Vite pour obtenir et dĂ©finir des variables dâenvironnement.
Notez que toutes les variables dâenvironnement sont disponibles dans le code cotĂ© serveur, mais seulement les variables prĂ©fixĂ©es avec PUBLIC_ sont disponibles dans le code client pour des raisons de sĂ©curitĂ©.
Jetez un oeil Ă lâexemple officiel des variables dâenvironnement pour un aperçu des pratiques Ă appliquer.
SECRET_PASSWORD=motdepasse123PUBLIC_ANYBODY=juste là Dans cet exemple, PUBLIC_ANYBODY ( disponible en tant que import.meta.env.PUBLIC_ANYBODY ) sera accessible à la fois dans le code cÎté serveur et cÎté client, alors que SECRET_PASSWORD ( disponible en tant que import.meta.env.SECRET_PASSWORD ) ne sera accessible que cÎté serveur.
Variables dâenvironnement par dĂ©faut
Section titled Variables dâenvironnement par dĂ©fautAstro inclut quelques variables dâenvironnement par dĂ©faut :
import.meta.env.MODE(development|production): ReprĂ©sente le mode dans lequel le site tourne actuellement. DĂ©fini commedevelopmenten utilisant la commandeastro devet Ăproductionen utilisantastro build.import.meta.env.BASE_URL(string): ReprĂ©sente lâURL de base sous laquelle votre site est dĂ©ployĂ©. DĂ©terminĂ© par lâoptionbasedans votre configuration.import.meta.env.PROD(boolean): Si votre site tourne en mode âproductionâ.import.meta.env.DEV(boolean): Si votre site tourne en mode âdevelopmentâ (toujours opposĂ© Ă la valeur deimport.meta.env.PROD).import.meta.env.SITE(string): Lâoptionsitedans votre configuration spĂ©cifiĂ© dans le fichierastro.config.mjsde votre projet.
DĂ©finir des variables dâenvironnement
Section titled DĂ©finir des variables dâenvironnementLes variables dâenvironnement peuvent ĂȘtre chargĂ©es depuis les fichiers .env dans le rĂ©pertoire de votre projet.
Vous pouvez aussi ajouter/attacher un mode (soit production ou development) en suffixe au nom du fichier, comme .env.production ou .env.development, qui rendent ces variables dâenvironnement uniquement actives dans ce mode.
Créez un fichier .env dans le répertoire de votre projet et ajoutez quelques variables à ce fichier.
# Ceci ne sera disponible que lorsque vous lancerez le serveur !DB_PASSWORD="foobar"# Ceci sera disponible partout !PUBLIC_POKEAPI="https://pokeapi.co/api/v2".env # ChargĂ© dans tous les cas.env.local # ChargĂ© dans tous les cas, ignorĂ© par git.env.[mode] # ChargĂ© uniquement dans le mode spĂ©cifiĂ©.env.[mode].local # ChargĂ© uniquement dans le mode spĂ©cifiĂ©, ignorĂ© par gitObtenir des variables dâenvironnement
Section titled Obtenir des variables dâenvironnementAu 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 === trueconst data = await db(import.meta.env.DB_PASSWORD);
// Quand import.meta.env.SSR === falseconst data = fetch(`${import.meta.env.PUBLIC_POKEAPI}/pokemon/squirtle`);Ne vous inquiétez pas si votre navigateur ne supporte pas import.meta.env, Vite remplace toutes les mentions de import.meta.env par des valeurs statiques.
â ïžATTENTIONâ ïž : Ătant donnĂ© que Vite remplace statiquement
import.meta.env, vous ne pouvez pas y accéder avec des clés dynamiques commeimport.meta.env[key].
Autocomplétion pour TypeScript
Section titled Autocomplétion pour TypeScriptPar défaut, Vite fournit des définitions de type pour import.meta.env dans vite/client.d.ts.
Vous pouvez aussi dĂ©finir dâautres variables dâenvironnement dans les fichiers .env.[mode], mais vous voulez sĂ»rement accĂ©der Ă lâautocomplĂ©tion pour les variables dâenvironnement dĂ©finies par lâutilisateur qui commencent par PUBLIC_.
Pour faire cela, vous pouvez créer un fichier env.d.ts dans le répertoire src/, puis étendre ImportMetaEnv comme ceci :
interface ImportMetaEnv { readonly DB_PASSWORD: string; readonly PUBLIC_POKEAPI: string; // plus de variables d'environnement...}
interface ImportMeta { readonly env: ImportMetaEnv;}