DOTENV Переменные среды Windows, но другие не отображаются

Я использую Node, установил dotenv на свой ПК и сохранил фиктивную переменную среды (API_KEY=43783283287) в файле .env.

Также рассмотрите пути к файлам ниже (если это поможет):

  • app.js хранится в bloccit/src/app.js.
  • .env хранится в bloccit/.env
  • main-config.js хранится в bloccit\src\config\main-config.js

Чтобы получить полную картину, это также фрагмент кода

основной-config.js:

require("dotenv").config()
const path = require("path");
const viewsFolder = path.join(__dirname, "..", "views");

приложение.js:

const express = require("express");
const app = express();

const appConfig = require("./config/main-config.js");

console.log(process.env); //returns windows environment variables
console.log(process.env.API_KEY); //returns undefined

const routeConfig = require("./config/route-config.js");

appConfig.init(app, express);
routeConfig.init(app);

module.exports = app;

.env:

API_KEY=43783283287

Проблема: когда я запускаю свой файл app.js (который включает console.log(process.env)), я получаю список всех переменных среды Windows (см. изображение, прикрепленное ниже), но я не вижу в списке свой API_KEY.

Кроме того, если я делаю console.log(process.env.API_KEY), он возвращает undefined.

Что я делаю не так?

введите здесь описание изображения


person user3926863    schedule 12.11.2019    source источник
comment
Во-первых, вы не показываете код, в котором фактически вызываете dotenv. Потому что он ничего не добавит к process.env, если вы его не загрузите.   -  person Mike 'Pomax' Kamermans    schedule 13.11.2019
comment
Привет @Mike'Pomax'Kamermans, я включил приведенный выше код, чтобы дать вам больше контекста. Когда вы говорите вызывать dotenv, вы имеете в виду require("dotenv").config()?   -  person user3926863    schedule 13.11.2019
comment
помните, что dotenv говорит вам как можно раньше в вашем приложении потребовать и настроить dotenv, поэтому сделайте эту строку 1 в вашем app.js, а не строку в main-config. Также не пытайтесь быть умным в этом случае: .env файл находится в корневом каталоге, app.js — в корневом каталоге, а app.js получает require("dotenv").config(). Если что-то из этого не так, вам придется указать dotenv, где явно найти файл .env, который необходимо загрузить, что обычно совершенно не нужно.   -  person Mike 'Pomax' Kamermans    schedule 13.11.2019
comment
Я не вижу здесь ничего, что было бы проблемой. Наличие .env в корне и app.js в src — это нормально. Можете ли вы подтвердить, что это называется .env   -  person Samuel Goldenbaum    schedule 13.11.2019
comment
@ Chev, привет, да, я подтверждаю, что он там и называется .env. Мне действительно кажется, что этот файл игнорируется, и система показывает только переменные среды моего ПК.   -  person user3926863    schedule 14.11.2019
comment
Хм, не могли бы вы поделиться cmd, который вы используете для запуска приложения.   -  person Samuel Goldenbaum    schedule 14.11.2019
comment
Я действительно исправил это! Спасибо @Chev, когда вы спросили меня о подтверждении того, написал ли я .env, я подтвердил это, но затем, запустив -ls a, обнаружил, что он был сохранен как .env.env ... исправил это, и теперь он работает!   -  person user3926863    schedule 14.11.2019
comment
Круто, удачи в остальном   -  person Samuel Goldenbaum    schedule 14.11.2019


Ответы (3)


В моем случае каждый раз, когда я пытался получить ключ из файла .env с помощью process.env.MY_KEY, он возвращал значение undefined.

Я мучился с этой проблемой в течение двух часов только потому, что назвал файл как-то вроде keys.env, который не считается файлом .env.

Итак, вот список устранения неполадок:

Имя файла должно быть .env (я считаю, что .env.test также приемлемо).

Убедитесь, что вы требуете его как можно раньше в своем приложении, используя этот оператор require('dotenv').config();

Файл .env должен находиться в корневом каталоге вашего проекта.

Следуйте правилам записи файлов, таким как DB_HOST=localhost, не нужно заключать значения в двойные/одинарные кавычки.

Также проверьте документацию пакета на сайте NPM.

person Tanuj Choudhary    schedule 05.08.2020

Я использую PM2 для запуска своих приложений и столкнулся с той же ситуацией, что и вы, ребята. Я получил undefined при попытке распечатать/использовать файл .env.

В моем случае проблема в том, что я запускал pm2 start вне папки 'dist'. Например: я просто открывал Powershell и запускал pm2 start C:\inetpub\wwwroot\node-apps\my-app\dist\index.js --name my-app

Через два часа после некоторого гугления я понял, что делаю... (фейспалм) Один раз я запускал cd dist_path раньше, а потом только pm2 start index.js --name=my=app, все работало как по маслу.

Я надеюсь, что это может помочь кому-то, кто столкнулся с той же проблемой.

person rom5jp    schedule 20.03.2021

Вы вызываете require('dotenv').config() два каталога выше корневого каталога, где хранится файл .env.

Так должно быть

main-config.js

const path = require("path");
require("dotenv").config({ path: path.join(__dirname, "../../") })
const viewsFolder = path.join(__dirname, "..", "views");
person John Michael Manlupig    schedule 20.03.2021