如何在serverless.ts中使用process.env



我正在使用无服务器框架来部署一些RESTAPI。早些时候我使用serverless.yml,现在迁移到typescript版本。我有一些AWS密钥,我想把它们保存在env文件中,而不是直接添加。早些时候我直接添加了它们。

我正在尝试做如下的事情:

export const serverless = {
frameworkVersion: '3',
useDotenv : true,
plugins: ['serverless-webpack', 'serverless-offline'],
provider: {
name: 'aws',
runtime: 'nodejs14.x',
stage: process.env.stage,  // check this
profile: process.env.stage === 'dev ? 'dev' : 'prod', // check this
region: process.env.region,
},
};

这不起作用。我试着记录env变量和上面的对象,但它是空的。我已经尝试过使用这个插件-https://github.com/neverendingqs/serverless-dotenv-plugin

看起来,env变量是在serverless.ts文件之后加载的。

我应该坚持使用-${self:custom.stage}语法吗。我试图避免这种情况。或者可以使用process.env吗?

编辑:

尝试使用语法时-${env:profile}

Cannot resolve variable at "provider.profile": Value not found at "env" source

要访问无服务器配置中的env变量,请使用${env:VARIABLE_NAME}。对于stage:对于我来说${opt:sstage}在运行sls --stage STAGE_NAME时有效。

在您的情况下:

export const serverless = {
frameworkVersion: '3',
useDotenv : true,
plugins: ['serverless-webpack', 'serverless-offline'],
provider: {
name: 'aws',
runtime: 'nodejs14.x',
stage: '${opt:stage}', 
profile: ${opt:stage, 'prod'}, // if no --stage default to 'prod'
region: '${env:region}',
},
};

最新更新