web-dev-qa-db-fra.com

Basculez entre plusieurs fichiers .env comme .env.développement avec nœud.js

Je veux utiliser des fichiers .env distincts pour chaque mode (développement, production, etc.). Lorsque vous travaillez sur mes projets VUE.JS, je peux utiliser des fichiers comme .env.development ou alors .env.production Pour obtenir des valeurs différentes pour la même clé ENV. (Exemple: dans .env.Développement: FOO = BAR et IN .ENV.PRODUCTION: FOO = Baz, dans le mode de développement Process.Env.foo serait un bar, en production, je serais Baz).

Je travaille sur un serveur Express et je veux utiliser ces mêmes types de fichiers .env pour stocker le port, la DB URI, l'utilisateur, les pwd ...

Je sais que je peux éditer les scripts dans forfait.json comme ceci:

"scripts": {
    "start": "NODE_ENV=development PORT=80 node ./bin/www",
    "start-prod": "NODE_ENV=production PORT=81 node ./bin/www"
}

mais cela devient en désordre lorsque vous utilisez plusieurs variables.

J'ai essayé d'utiliser Dotenv mais il semble que vous ne puissiez utiliser que le fichier .env. Pas .env.développement et .env.Production.

Puis-je utiliser le paquet Dotenv ou en avons-je besoin d'un autre? Ou pourrais-je faire cela sans aucun paquet?

15
Jonas

J'utilise le Package NPM personnalisé pour gérer plusieurs fichiers .env. Il suffit de mettre cela en haut de votre code:

require('custom-env').env();

et il chargera des variables d'environnement à partir du fichier .env.X, où x est la valeur de vous NODE_ENV variable d'environnement. Par exemple: .env.test ou alors .env.production.

ICI est un bon tutoriel sur la façon d'utiliser l'emballage.

0
Martin Omander

Je voulais juste ajouter ceci pour d'autres personnes qui ont des problèmes. Les deux réponses ci-dessus sont légèrement éteintes. laisse-moi expliquer. Le gars ci-dessus devait utiliser le chemin comme dans

  • le premier exemple qu'il manque un ./ le ./ indique le répertoire actuel à node.js. C'est pourquoi dans le premier exemple si le fichier env n'a été pas à la base du PC, il ne le trouverait jamais. L'utilisation d'un chemin est un travail méchant autour, mais la meilleure façon de le faire est de simplement ajouter un ./ Ceci dit hey Computer Regardez dans mon répertoire actuel pour ce fichier.
//this says hey computer look in my current directory for this file. 
 
require('dotenv').config({ path: `./.env.${process.env.NODE_ENV}` })


//I reccomend doing a console.log as well to make sure the names match*
console.log(`./.env.${process.env.NODE_ENV}`)
0
Josh