Не удалось загрузить Heroku ./.env - PullRequest
0 голосов
/ 15 января 2020

Моя проблема

У меня проблемы с загрузкой переменных среды в систему производства Heroku. При нажатии на Heroku я получаю следующее сообщение об ошибке во время сценария сборки:

Failed to load ./.env.

Текущая настройка

Я использую файл .env в root моего приложения на местном уровне. Я могу успешно загрузить свои переменные окружения с помощью плагина dotenv-webpack следующим образом:

//webpack.config

const Dotenv = require('dotenv-webpack')
module.exports = {
  // other settings...

  plugins: [
    new Dotenv(),
  ]
};

Загрузка переменных окружения:

//server.js

require('dotenv').config();
console.log(process.env.MY_VARIABLE);

Это работает как очарование локально, но не работает в Heroku .

Примечание: мои конфигурационные переменные установлены на Heroku, так что это не проблема.


Что я пробовал

У меня есть Я уже пытался принудительно загрузить файл .env из root моего приложения следующим образом:

new Dotenv({ path: path.resolve(__dirname, './.env') });

Кто-то также отметил, что среда Heroku может быть системными переменными среды поэтому я попытался загрузить их, используя:

new Dotenv({ systemVars: true });

Ни одна из этих попыток не сработала для меня.


Моя догадка

У меня есть заметил, что Heroku сохраняет их файл .env в ./tmp/build_someRandomBuildId/.env. Я предполагаю, что файл .env не находится в root каталога, поэтому dotenv не может его найти. Также нет способа жестко закодировать местоположение этого файла в моей конфигурации Webpack, поскольку идентификатор сборки рандомизируется с каждой сборкой. Есть ли способ заставить Webpack искать файл в динамическом c месте?

1 Ответ

0 голосов
/ 16 января 2020

Я наконец нашел решение, оставив его здесь для тех, у кого та же проблема, что и у меня.

Я использовал dotenv-webpack для локальной установки переменных окружения, что работало как чудо. Heroku, с другой стороны, устанавливает свои переменные среды автоматически, поэтому нет необходимости устанавливать их самостоятельно. Нет необходимости искать файл .env. Все, что мне нужно было сделать, это разделить мой webpack.config на 2 отдельных файла.

//webpack.dev

require('dotenv').config();

plugins: [
  new Dotenv()
],

Локально загрузить файл .env.

//webpack.prod

require('dotenv').config();

plugins: [
  new webpack.DefinePlugin({
    'process.env': {
      'YOUR_VARIABLE': JSON.stringify(process.env.YOUR_VARIABLE),
    }
  });
]

Получить переменные среды из Heroku и записать их к вашему собственному процессу. env

...