Я получил ваш вариант использования, просто используя обычный 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
Это работает как шарм, единственным недостатком является то, что вам нужно редактировать несколько разных файлов всякий раз, когда вы хотите добавить новую переменную среды.