Utiliser des variables d'environnement
Astro vous donne accès à la prise en charge des variables d’environnement intégrées de Vite et inclut certaines variables d’environnement par défaut pour votre projet qui vous permettent d’accéder aux valeurs de configuration de votre projet actuel (par exemple site
, base
), que votre projet soit exécuté en mode développement ou production, et plus encore.
Astro fournit également un moyen d’utiliser et d’organiser vos variables d’environnement avec la sûreté du typage. Celui-ci est disponible pour une utilisation dans le contexte Astro (par exemple, les composants Astro, les routes et les points de terminaison, les composants de framework UI, le middleware) et il est géré avec un schéma dans votre configuration Astro.
Support intégré de Vite
Titre de la section Support intégré de ViteAstro utilise le support intégré de Vite pour les variables d’environnement, qui sont remplacées statiquement au moment de la construction, et vous permet d’utiliser toutes 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é.
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.
Les fichiers .env
ne sont pas chargés dans les fichiers de configuration.
Autocomplétion pour TypeScript
Titre de la section Autocomplétion pour TypeScriptPar défaut, Astro fournit une définition de type pour import.meta.env
dans astro/client.d.ts
.
Bien que vous puissiez définir davantage de variables d’environnement personnalisées dans les fichiers .env.[mode]
, vous souhaiterez peut-être obtenir TypeScript IntelliSense pour les variables d’environnement définies par l’utilisateur qui sont préfixées par PUBLIC_
.
Pour y parvenir, vous pouvez créer un env.d.ts
dans src/
et configurer ImportMetaEnv
comme ceci :
Variables d’environnement par défaut
Titre de la section Variables d’environnement par défautAstro inclut quelques variables d’environnement par défaut :
import.meta.env.MODE
: Le mode dans lequel tourne votre site. C’estdevelopment
lorsque vous exécutezastro dev
etproduction
lorsque vous exécutezastro build
.import.meta.env.PROD
:true
si votre site est exécuté en mode production ;false
sinon.import.meta.env.DEV
:true
si votre site tourne en développement ;false
sinon. Toujours l’opposé deimport.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 configurationbase
.import.meta.env.SITE
: C’est l’optionsite
spécifiée dans le fichierastro.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 configurationbuild.assetsPrefix
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.
Définir des variables d’environnement
Titre de la section Définir des variables d’environnementLe fichier .env
Titre de la section Le fichier .envLes variables d’environnement peuvent être chargées à partir des fichiers .env
dans le répertoire de votre projet.
Créez simplement un fichier .env
dans le répertoire du projet et ajoutez-y quelques variables.
Vous pouvez également ajouter .production
, .development
ou un nom de mode personnalisé au nom de fichier lui-même (par exemple env.testing
, .env.staging
). Cela vous permet d’utiliser différents ensembles de variables d’environnement à différents moments.
Les commandes astro dev
et astro build
sont par défaut respectivement en modes "development"
et "production"
. Vous pouvez exécuter ces commandes avec l’option --mode
pour transmettre une valeur différente pour mode
et charger le fichier .env
correspondant.
Cela vous permet d’exécuter le serveur de développement ou de créer votre site en vous connectant à différentes API :
Pour plus d’informations sur les fichiers .env
, voir la documentation de Vite (EN).
Dans le fichier de configuration Astro
Titre de la section Dans le fichier de configuration AstroAstro évalue les fichiers de configuration avant de charger vos autres fichiers. Cela signifie que vous ne pouvez pas utiliser import.meta.env
dans astro.config.mjs
pour accéder aux variables d’environnement qui ont été définies dans les fichiers .env
.
Vous pouvez utiliser process.env
dans un fichier de configuration pour accéder à d’autres variables d’environnement, comme celles définies par la CLI.
Vous pouvez également utiliser l’assistant loadEnv
de Vite pour charger manuellement les fichiers .env
.
pnpm
ne vous permet pas d’importer des modules qui ne sont pas directement installés dans votre projet. Si vous utilisez pnpm
, vous devrez installer vite
pour utiliser l’assistant loadEnv
.
Utilisation en CLI
Titre de la section Utilisation en CLIVous pouvez également ajouter des variables d’environnement lorsque vous exécutez votre projet :
Obtenir des variables d’environnement
Titre de la section Obtenir des variables d’environnementLes variables d’environnement dans Astro sont accessibles avec import.meta.env
, en utilisant la fonctionnalité import.meta ajoutée dans ES2020, au lieu de process.env
.
Par exemple, utilisez import.meta.env.PUBLIC_POKEAPI
pour obtenir la variable d’environnement PUBLIC_POKEAPI
.
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.
Variables d’environnement avec sûreté du typage
Titre de la section Variables d’environnement avec sûreté du typageL’API astro:env
vous permet de configurer un schéma avec sûreté du typage pour les variables d’environnement que vous avez définies. Cela vous permet d’indiquer s’ils doivent être disponibles sur le serveur ou le client, et de définir leur type de données et leurs propriétés supplémentaires.
astro:env
.
Utilisation de base
Titre de la section Utilisation de baseDéfinissez votre schéma
Titre de la section Définissez votre schémaPour configurer un schéma, ajoutez l’option env.schema
à votre configuration Astro :
Vous pouvez ensuite enregistrer des variables sous forme de chaîne de caractères, de nombre, d’énumération ou de booléen en utilisant l’assistant envField
. Définissez le type de variable d’environnement Définissez le type de variable d’environnement en fournissant les propriétés context
(client ou serveur) et access
(secret ou public) pour chaque variable, et transmettez toutes les propriétés supplémentaires telles que optional
ou default
dans un objet :
Les types seront générés pour vous lors de l’exécution de astro dev
ou astro build
, mais vous pouvez exécuter astro sync
pour générer des types uniquement.
Utiliser les variables de votre schéma
Titre de la section Utiliser les variables de votre schémaImportez et utilisez vos variables définies à partir du module /client
ou /server
approprié :
Types de variables
Titre de la section Types de variablesIl existe trois types de variables d’environnement, déterminées par la combinaison des paramètres context
(client ou serveur) et access
(secret ou public) définis dans votre schéma :
-
Variables publiques du client : Ces variables se retrouvent à la fois dans vos bundles client et serveur finaux et sont accessibles à la fois depuis le client et le serveur via le module
astro:env/client
: -
Variables publiques du serveur : Ces variables se retrouvent dans votre bundle de serveur final et sont accessibles sur le serveur via le module
astro:env/server
: -
Variables secrètes du serveur : Ces variables ne font pas partie de votre bundle final et sont accessibles sur le serveur via le module
astro:env/server
:Par défaut, les secrets ne sont validés qu’au moment de l’exécution. Vous pouvez activer la validation des variables privées au démarrage en configurant
validateSecrets: true
.
Les variables secrètes du client ne sont pas prises en charge car il n’existe aucun moyen sûr d’envoyer ces données au client. Par conséquent, il n’est pas possible de configurer à la fois context: "client"
et access: "secret"
dans votre schéma.
Types de données
Titre de la section Types de donnéesIl existe actuellement quatre types de données pris en charge : les chaînes de caractères, les nombres, les énumérations et les booléens :
envField
.
Récupérer des secrets de manière dynamique
Titre de la section Récupérer des secrets de manière dynamiqueMalgré la définition de votre schéma, vous souhaiterez peut-être récupérer la valeur brute d’un secret donné ou récupérer des secrets non définis dans votre schéma. Dans ce cas, vous pouvez utiliser getSecret()
exporté depuis astro:env/server
:
Limitations
Titre de la section Limitations-
astro:env
est un module virtuel, ce qui signifie qu’il ne peut être utilisé que dans le contexte Astro. Par exemple, vous pouvez l’utiliser dans :- les Middlewares
- les routes et points de terminaison Astro
- les composants Astro
- les composants de framework
- les modules
Vous ne pouvez pas l’utiliser dans ce qui suit et devrez recourir à
process.env
:astro.config.mjs
- les scripts
-
@astrojs/cloudflare
est un peu différent des autres adaptateurs. Les variables d’environnement sont limitées à la requête, contrairement à Node.js où elles sont globales.Cela signifie que vous devez toujours utiliser des secrets dans la portée de la requête :