Appearance
Variables et modes Env
Variables Env
Vite expose les variables env sur l'objet spécial i
. Certaines variables intégrées sont disponibles dans tous les cas :
i
: {chaîne} le mode dans lequel l'application fonctionne.mport.meta.env.MODE i
: {string} l'url de base à partir de laquelle l'application est servie. Elle est déterminée par l'option de configurationmport.meta.env.BASE_URL base
.i
: {booléen} si l'application fonctionne en production.mport.meta.env.PROD i
: {booléen} si l'application est en cours de développement (toujours l'opposé demport.meta.env.DEV i
).mport.meta.env.PROD i
: {booléen} si l'application est exécutée dans le [serveur] (./ssr.md#conditional-logic).mport.meta.env.SSR
Remplacement de la production
En production, ces variables env sont statiquement remplacées. Il est donc nécessaire de toujours les référencer en utilisant la chaîne statique complète. Par exemple, un accès dynamique aux clés comme i
ne fonctionnera pas.
Il remplacera également ces chaînes apparaissant dans les chaînes JavaScript et les templates Vue. Cela devrait être un cas rare, mais cela peut être involontaire. Vous pouvez voir des erreurs comme Missing Semicolon
ou Unexpected token
dans ce cas, par exemple lorsque "p
NODE_ENV"
est transformé en ""development" : "
. Il existe des moyens de contourner ce comportement :
Pour les chaînes JavaScript, vous pouvez séparer la chaîne par un espace Unicode de largeur nulle, par exemple
i
.mport.meta\u200b.env.MODE' Pour les modèles Vue ou tout autre HTML compilé en chaînes JavaScript, vous pouvez utiliser la balise [
<wbr>
] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr), par exemplei
.mport.meta.<wbr>env.MODE
Fichiers .env
Vite utilise dotenv pour charger des variables d'environnement supplémentaires à partir des fichiers suivants dans votre répertoire d'environnement :
.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 git
Priorités de chargement des envois
Un fichier env pour un mode spécifique (par exemple .env.production
) aura une priorité plus élevée qu'un fichier générique (par exemple .env
).
De plus, les variables d'environnement qui existent déjà lorsque Vite est exécuté ont la plus haute priorité et ne seront pas écrasées par les fichiers .env
. Par exemple, lors de l'exécution de VITE_SOME_KEY=123 vite build
.
Les fichiers .env
sont chargés au démarrage de Vite. Redémarrez le serveur après avoir effectué des modifications.
Les variables env chargées sont également exposées au code source de votre client via i
en tant que chaînes de caractères.
Pour éviter de divulguer accidentellement des variables env au client, seules les variables préfixées par VITE_
sont exposées à votre code traité par Vite. Par exemple, pour les variables env suivantes :
VITE_SOME_KEY=123
DB_PASSWORD=foobar
Seul Vite_SOME_KEY
sera exposé comme i
au code source de votre client, mais pas DB_PASSWORD
.
js
console.log(import.meta.env.VITE_SOME_KEY) // 123
console.log(import.meta.env.DB_PASSWORD) // non défini
Si vous souhaitez personnaliser le préfixe des variables env, consultez l'option envPrefix.
NOTES DE SÉCURITÉ
Les fichiers
.env.*.local
sont uniquement locaux et peuvent contenir des variables sensibles. Vous devriez ajouter*.local
à votre.gitignore
pour éviter qu'ils soient vérifiés dans git.Puisque toutes les variables exposées dans votre code source Vite se retrouveront dans votre paquetage client, les variables
VITE_*
ne doivent pas contenir d'informations sensibles.
IntelliSense pour TypeScript
Par défaut, Vite fournit des définitions de type pour i
dans vite/client.d.ts
. Bien que vous puissiez définir plus de variables env personnalisées dans les fichiers .env.[mode]
, vous pouvez vouloir obtenir TypeScript IntelliSense pour les variables env définies par l'utilisateur qui sont préfixées avec VITE_
.
Pour cela, vous pouvez créer un fichier env.d.ts
dans le répertoire src
, puis augmenter ImportMetaEnv
comme ceci :
typescript
/// <référence types="vite/client" />
interface ImportMetaEnv {
readonly VITE_APP_TITLE : string
// plus de variables env...
}
interface ImportMeta {
readonly env : ImportMetaEnv
}
Si votre code repose sur des types provenant d'environnements de navigateur tels que DOM et WebWorker, vous pouvez mettre à jour le champ lib dans tsconfig.json
.
json
{
"lib" : ["WebWorker"]
}
Modes
Par défaut, le serveur de développement (commande dev
) fonctionne en mode development
et la commande build
fonctionne en mode production
.
Cela signifie que lorsque vous exécutez vite build
, il chargera les variables env de .env.production
s'il y en a une :
# .env.production
VITE_APP_TITLE=Mon application
Dans votre application, vous pouvez rendre le titre en utilisant i
.
Cependant, il est important de comprendre que le mode est un concept plus large que le simple développement ou la production. Un exemple typique est que vous pouvez vouloir avoir un mode "staging" où il devrait avoir un comportement similaire à la production, mais avec des variables env légèrement différentes de la production.
Vous pouvez écraser le mode par défaut utilisé pour une commande en passant l'option --mode
. Par exemple, si vous voulez construire votre application pour notre hypothétique mode "staging" :
bash
vite build --mode staging
Et pour obtenir le comportement que nous voulons, nous avons besoin d'un fichier .env.staging
:
# .env.staging
NODE_ENV=production
VITE_APP_TITLE=My App (staging)
Maintenant votre application de mise en place devrait avoir un comportement similaire à celui de la production, mais afficher un titre différent de celui de la production.