我将以下内容用作自定义serverless-dotenv-plugin
插件配置:
custom:
dotenv:
path: .env-${opt:stage, 'local'}
但是我真正想要得到的是,当我不提供任何参数时从.env
文件加载环境,而当我使用.env.staging
作为CLI参数时从staging
文件加载环境。
我不知道如何在上面的path
中反映出来。有什么帮助吗?
答案 0 :(得分:1)
仅使用普通的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
它的工作原理很吸引人,唯一的缺点是,每当要添加新的环境变量时,您都必须编辑几个不同的文件。
答案 1 :(得分:1)
我是serverless-dotenv-plugin的作者。尝试从提供程序或其他选项动态加载环境文件时出现后勤问题。此后,我已经更新了插件,以便您可以根据设置的环境动态加载环境文件。
例如,如果您运行“ NODE_ENV = production sls deploy”,它将查找名为.env.production的文件。如果找不到,它将回退到.env。
有关更多详细信息,请参见自述文件https://github.com/infrontlabs/serverless-dotenv-plugin