You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在serverless.yml中无需逐个定义即可加载全部dotenv环境变量

解决方案

方案1:使用Serverless Framework原生dotenv支持(无需额外安装插件,符合无额外dotenv插件的要求)

Serverless Framework v2.26.0及以上版本默认内置了dotenv加载能力,会自动识别对应stage的env文件并把所有变量注入到Lambda环境变量中,操作步骤:

  1. 删除serverless.yml中environment字段下手动定义的单个变量配置
  2. 确保你的env文件命名为.env.{stage}(你当前的.env.staging已经符合要求)
  3. 正常执行sls deploy --stage staging部署即可,代码中直接调用process.env.ENV_VAR1、process.env.ENV_VAR2都可以正常读取。

如果你的Serverless版本较低,或者需要显式控制env文件的加载逻辑,可以用方案2:

方案2:自定义脚本解析env文件(完全不用内置dotenv也不用插件)

原生${file()}语法仅支持解析yaml、json、js格式文件,无法直接读取shell格式的.env文件,你可以写一个极简的js脚本来解析env文件返回键值对:

  1. 项目根目录新建load-env.js文件,内容如下:
const fs = require('fs')
module.exports = (serverless) => {
  const stage = serverless.processedInput.options.stage || 'dev'
  const envContent = fs.readFileSync(`.env.${stage}`, 'utf8')
  const envVars = {}
  envContent.split('\n').forEach(line => {
    // 跳过注释和空行
    if (!line.trim() || line.startsWith('#')) return
    const [key, ...valueParts] = line.split('=')
    // 去掉值两端的引号和多余空格
    const value = valueParts.join('=').trim().replace(/^['"]|['"]$/g, '')
    envVars[key.trim()] = value
  })
  return envVars
}
  1. 修改serverless.yml的environment配置:
functions:
  server:
    handler: index.server
    events:
      - http: ANY /
      - http: "ANY /{proxy+}"
    environment: ${file(./load-env.js)}
  1. 正常执行sls deploy --stage staging部署即可,.env.staging中所有变量都会自动注入到Lambda环境变量中。

注意事项

  • 不要将.env.*文件提交到代码仓库,记得加入.gitignore
  • Lambda环境变量总大小不能超过4KB,如果变量过多超过限制,建议使用AWS Parameter Store或者Secrets Manager存储敏感变量

内容的提问来源于stack exchange,提问作者Jastria Rahmat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:57:01