使用serverless-dotenv-plugin纠正.env文件

时间:2018-07-04 09:35:07

标签: serverless-framework serverless serverless-plugins

我将以下内容用作自定义serverless-dotenv-plugin插件配置:

custom: dotenv: path: .env-${opt:stage, 'local'}

但是我真正想要得到的是,当我不提供任何参数时从.env文件加载环境,而当我使用.env.staging作为CLI参数时从staging文件加载环境。

我不知道如何在上面的path中反映出来。有什么帮助吗?

2 个答案:

答案 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.envproduction.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