Skip to content

Bun lit vos fichiers .env automatiquement et fournit des moyens idiomatiques de lire et écrire vos variables d'environnement par programmation. De plus, certains aspects du comportement d'exécution de Bun peuvent être configurés avec des variables d'environnement spécifiques à Bun.

Définir les variables d'environnement

Bun lit les fichiers suivants automatiquement (listés par ordre de prépondérance croissante).

  • .env
  • .env.production, .env.development, .env.test (selon la valeur de NODE_ENV)
  • .env.local
ini
FOO=bonjour
BAR=monde

Les variables peuvent également être définies via la ligne de commande.

sh
FOO=bonjourmonde bun run dev
sh
# Utilisation de CMD
set FOO=bonjourmonde && bun run dev

# Utilisation de PowerShell
$env:FOO="bonjourmonde"; bun run dev

Solution multiplateforme avec Windows">

Pour une solution multiplateforme, vous pouvez utiliser bun shell. Par exemple, la commande bun exec.

sh
bun exec 'FOO=bonjourmonde bun run dev'

Sur Windows, les scripts package.json appelés avec bun run utiliseront automatiquement le bun shell, rendant ce qui suit également multiplateforme.

json
"scripts": {
  "dev": "NODE_ENV=development bun --watch app.ts",
},

Ou par programmation en assignant une propriété à process.env.

ts
process.env.FOO = "bonjour";

Spécifier manuellement les fichiers .env

Bun prend en charge --env-file pour remplacer le fichier .env spécifique à charger. Vous pouvez utiliser --env-file lors de l'exécution de scripts dans le runtime de bun, ou lors de l'exécution de scripts package.json.

sh
bun --env-file=.env.1 src/index.ts

bun --env-file=.env.abc --env-file=.env.def run build

Désactiver le chargement automatique .env

Utilisez --no-env-file pour désactiver le chargement automatique des fichiers .env de Bun. Ceci est utile dans les environnements de production ou les pipelines CI/CD où vous voulez vous fier uniquement aux variables d'environnement système.

sh
bun run --no-env-file index.ts

Cela peut également être configuré dans bunfig.toml :

toml
# Désactiver le chargement des fichiers .env
env = false

Les fichiers d'environnement fournis explicitement via --env-file seront toujours chargés même si le chargement par défaut est désactivé.


Guillemets

Bun prend en charge les guillemets doubles, les guillemets simples et les backticks de littéral de modèle :

ini
FOO='bonjour'
FOO="bonjour"
FOO=`bonjour`

Expansion

Les variables d'environnement sont automatiquement étendues. Cela signifie que vous pouvez référencer des variables précédemment définies dans vos variables d'environnement.

ini
FOO=monde
BAR=bonjour$FOO
ts
process.env.BAR; // => "bonjourmonde"

Ceci est utile pour construire des chaînes de connexion ou d'autres valeurs composées.

ini
DB_USER=postgres
DB_PASSWORD=secret
DB_HOST=localhost
DB_PORT=5432
DB_URL=postgres://$DB_USER:$DB_PASSWORD@$DB_HOST:$DB_PORT/$DB_NAME

Cela peut être désactivé en échappant le $ avec un backslash.

ini
FOO=monde
BAR=bonjour\$FOO
ts
process.env.BAR; // => "bonjour$FOO"

dotenv

De manière générale, vous n'aurez plus besoin de dotenv ou dotenv-expand, car Bun lit les fichiers .env automatiquement.

Lire les variables d'environnement

Les variables d'environnement actuelles peuvent être accédées via process.env.

ts
process.env.API_TOKEN; // => "secret"

Bun expose également ces variables via Bun.env et import.meta.env, qui est un simple alias de process.env.

ts
Bun.env.API_TOKEN; // => "secret"
import.meta.env.API_TOKEN; // => "secret"

Pour afficher toutes les variables d'environnement actuellement définies dans la ligne de commande, exécutez bun --print process.env. Ceci est utile pour le débogage.

sh
bun --print process.env
BAZ=stuff
FOOBAR=aaaaaa
<beaucoup d'autres lignes>

TypeScript

Dans TypeScript, toutes les propriétés de process.env sont typées comme string | undefined.

ts
Bun.env.whatever;
// string | undefined

Pour obtenir l'autocomplétion et dire à TypeScript de traiter une variable comme une chaîne non optionnelle, nous utiliserons la fusion d'interfaces.

ts
declare module "bun" {
  interface Env {
    AWESOME: string;
  }
}

Ajoutez cette ligne à n'importe quel fichier de votre projet. Cela ajoutera globalement la propriété AWESOME à process.env et Bun.env.

ts
process.env.AWESOME; // => string

Configuration de Bun

Ces variables d'environnement sont lues par Bun et configurent des aspects de son comportement.

NomDescription
NODE_TLS_REJECT_UNAUTHORIZEDNODE_TLS_REJECT_UNAUTHORIZED=0 désactive la validation du certificat SSL. Ceci est utile pour les tests et le débogage, mais vous devriez être très hésitant à utiliser ceci en production. Note : Cette variable d'environnement a été initialement introduite par Node.js et nous avons gardé le nom pour la compatibilité.
BUN_CONFIG_VERBOSE_FETCHSi BUN_CONFIG_VERBOSE_FETCH=curl, alors les requêtes fetch journaliseront l'url, la méthode, les en-têtes de requête et les en-têtes de réponse dans la console. Ceci est utile pour déboguer les requêtes réseau. Cela fonctionne également avec node:http. BUN_CONFIG_VERBOSE_FETCH=1 est équivalent à BUN_CONFIG_VERBOSE_FETCH=curl sauf sans la sortie curl.
BUN_RUNTIME_TRANSPILER_CACHE_PATHLe transpileur d'exécution met en cache la sortie transpilée des fichiers source de plus de 50 ko. Cela permet aux CLIs utilisant Bun de se charger plus rapidement. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH est défini, alors le transpileur d'exécution mettra en cache la sortie transpilée dans le répertoire spécifié. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH est défini sur une chaîne vide ou la chaîne "0", alors le transpileur d'exécution ne mettra pas en cache la sortie transpilée. Si BUN_RUNTIME_TRANSPILER_CACHE_PATH n'est pas défini, alors le transpileur d'exécution mettra en cache la sortie transpilée dans le répertoire de cache spécifique à la plateforme.
TMPDIRBun nécessite occasionnellement un répertoire pour stocker des assets intermédiaires lors du bundling ou d'autres opérations. Si non défini, utilise par défaut le répertoire temporaire spécifique à la plateforme : /tmp sur Linux, /private/tmp sur macOS.
NO_COLORSi NO_COLOR=1, alors la sortie de couleur ANSI est désactivée.
FORCE_COLORSi FORCE_COLOR=1, alors la sortie de couleur ANSI est forcée, même si NO_COLOR est défini.
BUN_CONFIG_MAX_HTTP_REQUESTSContrôle le nombre maximum de requêtes HTTP concurrentes envoyées par fetch et bun install. Par défaut 256. Si vous rencontrez des limites de débit ou des problèmes de connexion, vous pouvez réduire ce nombre.
BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOADSi BUN_CONFIG_NO_CLEAR_TERMINAL_ON_RELOAD=true, alors bun --watch n'effacera pas la console lors du rechargement
DO_NOT_TRACKDésactive le téléchargement des rapports de plantage vers bun.report en cas de plantage. Sur macOS et Windows, le téléchargement des rapports de plantage est activé par défaut. Sinon, la télémétrie n'est pas encore envoyée au 21 mai 2024, mais nous prévoyons d'ajouter la télémétrie dans les prochaines semaines. Si DO_NOT_TRACK=1, alors le téléchargement automatique des rapports de plantage et la télémétrie sont tous deux désactivés.
BUN_OPTIONSAjoute des arguments de ligne de commande à toute exécution Bun. Par exemple, BUN_OPTIONS="--hot" fait que bun run dev se comporte comme bun --hot run dev

Mise en cache du transpileur d'exécution

Pour les fichiers de plus de 50 Ko, Bun met en cache la sortie transpilée dans $BUN_RUNTIME_TRANSPILER_CACHE_PATH ou le répertoire de cache spécifique à la plateforme. Cela permet aux CLIs utilisant Bun de se charger plus rapidement.

Ce cache de transpileur est global et partagé entre tous les projets. Il est sûr de supprimer le cache à tout moment. C'est un cache adressable par contenu, donc il ne contiendra jamais de doublons. Il est également sûr de supprimer le cache pendant qu'un processus Bun est en cours d'exécution.

Il est recommandé de désactiver ce cache lors de l'utilisation de systèmes de fichiers éphémères comme Docker. Les images Docker de Bun désactivent automatiquement ce cache.

Désactiver le cache du transpileur d'exécution

Pour désactiver le cache du transpileur d'exécution, définissez BUN_RUNTIME_TRANSPILER_CACHE_PATH sur une chaîne vide ou la chaîne "0".

sh
BUN_RUNTIME_TRANSPILER_CACHE_PATH=0 bun run dev

Que met-il en cache ?

Il met en cache :

  • La sortie transpilée des fichiers source de plus de 50 Ko.
  • La sourcemap pour la sortie transpilée du fichier

L'extension de fichier .pile est utilisée pour ces fichiers mis en cache.

Bun édité par www.bunjs.com.cn