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.jsOm 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
