javascript - dotenv-fil laddar inte miljövariabler


Jag har en .env-fil i rotmappen

NODE_ENV=development
NODE_HOST=localhost
NODE_PORT=4000
NODE_HTTPS=false
DB_HOST=localhost
DB_USERNAME=user
DB_PASSWORD=user

Och server.js-filen i root/app/config/server.js-mappen. Den första raden i server.js-filen är

require('dotenv').config();

Jag försökte också följande:

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

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

Men mina miljövariabler laddas inte när jag kör server.js-filen från kommandotolken

node root/app/config/server.js

Om jag använder visual studio och trycker på F5, laddas det!!

Jag är inte säker på vad jag gör fel, vad jag saknar. Alla förslag uppskattas mycket. Tack.

Svar #1

Vad sägs om att använda require('dotenv').config({path:__dirname+'/./../../.env'}) ?

Ditt problem verkar vara exekveringsvägen.

Svar #2

Detta löste mina problem i Node v8.14.1:

const path = require('path')
require('dotenv').config({ path: path.resolve(__dirname, '../.env') })

Att helt enkelt göra

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

resulterade i en plats som löstes som

/some/path/to/env/./../../.env

Svar #3

Här är en lösning på en rad:

require('dotenv').config({ path: require('find-config')('.env') })

Detta kommer att rekursivt gå igenom överordnade kataloger tills det hittar en .env-fil att använda.

Du kan också alternativt använda denna modul som kallas ckey inspirerad av enradaren ovan.

.env-fil från huvudmappen.

dotenv sample content
[email 
PASSWORD=iampassword123
API_KEY=1234567890

någon js-fil från underkatalog

const ck = require('ckey');

const userName = ck.USER;     // [email 
const password = ck.PASSWORD; // iampassword123
const apiKey   = ck.API_KEY;  // 1234567890

Svar #4

Om du anropar dotenv från en inbäddad fil, och din .env-fil finns i projektets rot, är sättet du vill koppla ihop punkterna via följande:

require('dotenv').config({path:'relative/path/to/your/.env'})

Svar #5

En av kommentarerna i @DavidP:s svar noterar att man loggar utdata från dotenv.config med

console.log(require("dotenv").config())

Detta kommer att skriva ut en logg av konfigurationen och visa fel. I mitt fall indikerade det att konfigurationsmetoden refererade till den aktuella katalogen istället för överordnad katalog som innehöll min .env-fil. Jag kunde referera till den med följande

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

Svar #6

Jag har haft det här problemet och det visade sig att REACT endast laddar variabler som börjar med REACT_APP_

VueJs kan ha ett liknande problem eftersom det förväntar sig att variabler ska vara prefixade med: VUE_APP_

Svar #7

Se till att ladda .env i början av inmatningsfilen (t.ex. index.js eller server.js). Ibland laddar utförandeordningen miljövariablerna efter att tjänsterna har initierats. Och genom att använda __dirname kan det enkelt peka på filen som behövs i förhållande till den aktuella filen.

Här är min projektstruktur så här.

.
├─ src
│  └─ index.ts
└─ .env
// index.ts
import dotenv from 'dotenv';
import path from 'path';

dotenv.config({path: path.join(__dirname, '..', '.env')});

...

Svar #8

I det sällsynta fallet att du når denna punkt, var mitt problem ganska dumt: jag namngav felaktigt mina miljövariabler med kolon ":" istället för likhetstecken "=". Nybörjarmisstag men det resulterande beteendet var att de felstavade variabeltilldelningarna inte laddades.

dotenv sample content

correct assignment
[email 

wrong assignment (will not load env var)
USER : [email 

Svar #9

Du kan först felsöka genom att använda:

console.log(require('dotenv').config())

I mitt scenario ligger min .env-fil i rotkatalogen och jag behöver använda den i en inbäddad katalog. Resultatet blir:

{
  parsed: {
    DATABASE_URL: 'mongodb://localhost/vidly',
    PORT: '8080'
  }
}

Så jag helt enkelt tolkar resultatet och lagrar det i en variabel:

const dotenv = require('dotenv').config().parsed;

Anslut sedan till min DATABASE_URL som ett JS-objekt:

dotenv.DATABASE_URL

Relaterade artiklar