Запуск файла .env и доступ к ним из узла - PullRequest
0 голосов
/ 09 января 2020

Это немного неловко, так как я Linux пользователь уже более 10 лет. Однако я столкнулся с проблемой, которую не могу понять.

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

Я бы просто написал, что это тот же терминал, с которого я запускаю приложение

# Linux bash
$ export SECRET=Ultr4Secr3t
$ echo $SECRET
$ > Ultr4Secr3t

Затем запустите приложение узла nodejs app.js

// app.js
console.log(process.env.SECRET)
> Ultr4Secr3t

Все хорошо!

Но мне бы очень хотелось, чтобы вместо этого в репо был файл .env.

Пример .env файла

SECRET=Ultr4Secr3t
# Linux bash
$ . .env # On Mac we had to do ". ./.env"
$ echo $SECRET
$ Ultr4Secr3t

Теперь, когда я запускаю приложение, происходит странная вещь

Затем запустите приложение узла nodejs app.js

// app.js
console.log(process.env.SECRET)
> undefined

Почему это undefined? Я бы предпочел не использовать пакет dotenv.

Ответы [ 3 ]

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

Пока вы работаете . ./.env, вы фактически устанавливаете их «локально». Например:

// .env
SECRET=123

Переменные среды, установленные без экспорта, не будут наследоваться в среде команд, которые вы вызываете.

Источник: Январь @ AskUbuntu

Когда вы echo $SECRET, он показывает вам вывод. Но когда вы env | grep "SECRET", это не покажет вам, его нет в вашей текущей bash среде.

Однако, если вы запустите export SECRET=123, оно будет в вашей среде. Следовательно, node может читать переменную окружения SECRET.

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

Вместо . .env вы можете запустить source .env так, чтобы переменные bash в файле .env также регистрировались внутри вашего основного процесса bash, из которого запускается процесс узла, и наследуют его переменные среды.

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

Ну, Node js не поддерживает это изначально. 1) Вы можете указать все переменные в команде узла при запуске приложения:

SECRET=Ultr4Secr3t node app.js

Затем вы можете получить доступ к этому через process.env

2) Вы можете добавить все свои настройки в файле config_file.json, а затем просто настройте разрешения. И все, что вам нужно, это const env = require('config_file')

...