Исправьте файл.env с помощью serverless-dotenv-plugin
Я использую следующие как обычай serverless-dotenv-plugin
конфигурация плагина:
custom:
dotenv:
path: .env-${opt:stage, 'local'}
Но то, что я действительно пытаюсь получить, это то, что среда загружается из .env
файл, когда я не даю аргументов и .env.staging
файл, когда я использую staging
в качестве аргумента CLI.
Я не знаю, как это может отразиться на path
выше. Любая помощь, пожалуйста?
2 ответа
Я получил ваш вариант использования, просто используя обычный плагин dotenv.
В моем serverless.yaml
Я указываю переменные среды, которые должны быть загружены из файла на основе stage
параметр (dev
по умолчанию):
provider:
stage: ${opt:stage, 'dev'}
environment:
FOO: ${file(./config.${self:provider.stage}.js):getEnvVars.FOO}
BAR: ${file(./config.${self:provider.stage}.js):getEnvVars.BAR}
Затем один файл на этапе, который загружает переменные среды справа .env file
:
config.dev.js
:
require('dotenv').config({path: __dirname + '/dev.env'});
const config = require('./environmentVariables.js');
module.exports.getEnvVars = config.getEnvVars;
config.staging.js
:
require('dotenv').config({path: __dirname + '/staging.env'});
const config = require('./environmentVariables.js');
module.exports.getEnvVars = config.getEnvVars;
Вместо того, чтобы экспортировать все переменные окружения в каждом из приведенных выше файлов конфигурации, я создал вспомогательный файл для этого (environmentVariables.js
):
module.exports.getEnvVars = () => ({
FOO: process.env.FOO,
BAR: process.env.BAR
});
Последнее, но не менее важное .env
файлы, содержащие фактические переменные. Я назвал файлы dev.env
а также production.env
,
FOO=foo
BAR=bar
Это работает как шарм, единственным недостатком является то, что вам нужно редактировать несколько разных файлов всякий раз, когда вы хотите добавить новую переменную среды.
Я автор serverless-dotenv-plugin. Возникла материально-техническая проблема при попытке динамически загружать файлы env от поставщика или других опций. С тех пор я обновил плагин, чтобы вы могли динамически загружать env-файлы в зависимости от того, какая среда установлена.
Например, если вы запустите "NODE_ENV=production sls deploy", он будет искать файл с именем.env.production. Если он не найден, он вернется к.env.
Смотрите README для получения более подробной информации https://github.com/infrontlabs/serverless-dotenv-plugin