web-dev-qa-db-fra.com

noeud dotenv ne fonctionne pas

j'essaie d'utiliser le module de noeud dotenv et il ne fonctionne pas pour moi. J'ai un fichier à config/config.js avec le contenu suivant:

'use strict';

var dotenv = require('dotenv');
dotenv.load();
console.log('config');

J'ai également un fichier appelé .env à la racine de mon dossier d'application. J'ai aussi des variables d'environnement comme TWILIO_ACCOUNT_SID. Voici le processus par lequel je passe en essayant d’utiliser les variables d’environnement dans une fonction donnée:

Omes-MacBook-Pro:sidetime ome$ node
> require('./config/config.js');
config
{}
> process.env.TWILIO_ACCOUNT_SID
undefined

J'ai défini TWILIO_ACCOUNT_SID dans mon fichier .env, mais dès que j'essaie de sortir la valeur sur ma console, j'obtiens l'erreur de l'indiquer. Si vous avez des suggestions sur la façon de résoudre ce problème, je les apprécierai beaucoup. 

26
user3775998

Dans mon cas, chaque fois que j'essaie d'obtenir un fichier sous forme de fichier .env à l'aide de process.env.MY_KEY, il retourne undefined

J'ai souffert de ce problème pendant deux heures simplement parce que j'ai nommé le fichier à l'aide de keys.env. Ce fichier n'est pas considéré comme un fichier .env.

alors voici troubleshooting list

  1. assurez-vous que le nom du fichier est ".env" (je pense que ".env.test" est acceptable)

  2. assurez-vous que vous en avez besoin As early as possible dans votre application à l'aide de cette instruction require('dotenv').config();

  3. assurez-vous que le fichier .env est in the root directory of your project

  4. assurez-vous que vous suivez le file writing rules comme DB_Host=localhost, car vous n'avez pas besoin de les envelopper d'une citation double ou simple

consultez également la documentation du paquet sur le site npm ici https://www.npmjs.com/package/dotenv

espérons que cela vous fera gagner du temps

29

Je résous en utilisant

require('dotenv').config({path: __dirname + '/.env'})

ou utilisez le chemin absolu:

C:\\asd\\auhsd\\.env

S'il ne trouve pas .env file il quitte undefined

20
teliz

je n'ai pas mis les variables d'environnement au bon format, comme dans la documentation du module dotenv, par exemple. Je faisais l'exportation TWILIO_CALLER_ID = "+ wwehehe" et le module dotenv n'analysait donc pas correctement mon fichier. Quand j’ai remarqué que j’avais retiré le mot-clé d’exportation des déclarations et que tout fonctionnait bien.

7
user3775998

A eu le même problème récemment. Vérifiez votre fichier .env et procédez comme suit:

key=value

au lieu de 

key:value
7
unplugged

J'ai eu le même problème et j'ai essayé 4 heures pour trouver la faute. Dans mon cas, c'était bizarre.

Quand j'ai essayé "node app.js", cela a fonctionné. Quand je voulais un démon pour le démarrer, cela ne fonctionnait pas.

Comment ai-je résolu mon problème? J'ai remplacé:

var dotenv = require('dotenv');
dotenv.load();

avec:

var dotenv = require('dotenv').config({path: path.join(__dirname, '.env')})
4
Alpha

Assurez-vous de définir cwd dans la configuration de pm2 sur le bon répertoire pour tous les appels à dotenv.config ().

Exemple: Votre fichier index.js se trouve dans/app/src, votre fichier .env se trouve dans/app. Votre fichier index.js a ceci

dotenv.config ({path: "../.env"});

Votre configuration pm2 json devrait avoir ceci: "Cwd": "/ app/src", "script": "index.js"

Vous pouvez également utiliser dotenv.config ({path: path.join (__ dirname, "../.env")}); pour éviter le problème CWD. Vous aurez toujours un problème si vous déplacez le fichier .env ou index.js l'un par rapport à l'autre.

3
Ahmed Jehanzaib

Veillez également à exécuter votre script de nœud à partir du dossierROOT.

Par exemple. J'utilisais un script de test dans un sous-dossier appelé ./bin/test.js. L'appeler comme suit: node ./bin/test.js fonctionnait parfaitement. L'appeler depuis le sous-dossier comme:

$ pwd
./bin
$ node ./test.js

cause dotenv pour ne pas trouver mon fichier ./.env.

3
Knowledge

Mon problème était stupide. J'ai créé le fichier .env dans un éditeur de texte et, lorsque je l'ai enregistré, il a été enregistré sous le nom 

'.env.txt' 

qui n'était visible qu'après avoir fait une 

'ls -a'

dans le terminal et vu le nom du fichier. 

Un rapide:

mv .env.txt .env

Et j'étais en affaires

2
Mike Baker

J'ai eu le même problème. J'ai réalisé que mon fichier était en quelque sorte encodé en UCS-2 BE BOM. La conversion de mon fichier .env en UTF-8 l'a corrigé (vous pouvez facilement le faire en utilisant Notepad ++, par exemple).

1

Assurez-vous que les variables ne sont pas déjà définies. Dotenv ne les remplacera pas.

Si des variables sont définies, vous devrez les supprimer. Dans PowerShell, vous pouvez utiliser la commande suivante - comme mentionné ici :

Remove-Item Env:\MyTestVariable
1
Korte

J'ai également eu un problème avec les variables .env qui ne se chargeaient pas et qui étaient undefined.

Ce que j'ai essayé:

index.js:

import dotenv from 'dotenv';
dotenv.config();
import models from './models';

models.js

import Sequelize from 'sequelize';
const sequelize = new Sequelize(
    process.env.DATABASE,
    process.env.DATABASE_USER,
    process.env.DATABASE_PASSWORD,
    {
        dialect: 'postgres',
    }
);

Apparemment, en raison de la façon dont le chargement des importations fonctionne dans nodejs, l'importation de modèles dans index.js a provoqué l'exécution du fichier models.js avant le dotenv.config(). Par conséquent, j'ai eu des valeurs indéfinies de process.env.

Quand j'ai changé de modèle.js pour faire la configuration de dotenv comme:

import Sequelize from 'sequelize';
import dotenv from 'dotenv';
dotenv.config();
const sequelize = new Sequelize(
    process.env.DATABASE,
    process.env.DATABASE_USER,
    process.env.DATABASE_PASSWORD,
    {
        dialect: 'postgres',
    }
);

ça a commencé à marcher!

0
andnyl

Le fichier '.env' doit se trouver dans le répertoire racine de votre fichier de serveur de nœud js (server.js ou pour moi). 

Si vous avez placé le fichier '.env' à la racine de votre projet, cela ne fonctionnera pas. Mon erreur est que le fichier server.js a imbriqué un dossier nommé 'contrôleur'.

J'ai donc dû résoudre le problème en plaçant le fichier .env dans le même répertoire que le fichier server.js.

0
ConfusedDeer

Avait le même problème. J'ai utilisé dotenv-webpack et j'ai besoin de définir

plugins: [
  new Dotenv()
]

in both webpack production et fichiers de base Webpack (j'utilise Webpack merge) . Si n'a pas été défini dans les deux fichiers, cela n'a pas fonctionné.

0
user1665355