我只使用普通的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.production.js:
require('dotenv').config({path: __dirname + '/production.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
它的作用就像一个魅力,唯一的缺点是你必须编辑几个不同的文件,每当你想添加一个新的环境变量。