2

我使用以下作为自定义serverless-dotenv-plugin插件配置:

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

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

我不知道这如何反映在path上面。请问有什么帮助吗?

4

2 回答 2

4

我只使用普通的dotenv插件就可以让你的用例工作。

在我的中,我根据参数(默认)serverless.yaml指定要从文件加载的环境变量:stagedev

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.envproduction.env.

FOO=foo
BAR=bar

它就像一个魅力,唯一的缺点是你必须编辑几个不同的文件,每当你想添加一个新的环境变量。

于 2018-09-20T13:34:05.210 回答
2

我是 serverless-dotenv-plugin 的作者。尝试从提供程序或其他选项动态加载 env 文件时存在逻辑问题。不过,我已经更新了插件,以便您可以根据设置的环境动态加载 env 文件。

例如,如果您运行“NODE_ENV=production sls deploy”,它将查找名为 .env.production 的文件。如果找不到,它将回退到 .env。

有关更多详细信息,请参阅自述文件https://github.com/infrontlabs/serverless-dotenv-plugin

于 2018-09-24T19:25:30.637 回答