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

如何在aws-nodejs-typescript模板中为dev和prod配置不同.env文件

解决方案:Serverless多环境.env文件加载问题

问题根源

你当前代码里,自执行函数中的this.provider.getStage()无法正确获取stage值,原因是:

  • 配置对象初始化阶段,this并不指向Serverless的provider上下文,此时this.provider为undefined
  • Serverless框架在配置执行阶段,会自动将stage注入到环境变量SLS_STAGE中,而非通过this.provider.getStage()方法获取

修复步骤

1. 确保.env文件正确导出

dev.env和prod.env需要用ES模块格式导出配置对象,示例:

// dev.env
export default {
  DB_CONNECTION_STRING: 'dev-db-url',
  API_SECRET: 'dev-secret'
};

2. 修改stage获取逻辑

将environment字段的自执行函数改为读取框架自动注入的SLS_STAGE环境变量,替换原代码:

provider: {
  // ...保留其他原有配置
  environment: (() => {
    // 优先取框架注入的SLS_STAGE,无值时默认使用dev
    const stage = process.env.SLS_STAGE || 'dev';
    console.log(`当前环境: ${stage}`);
    switch (stage) {
      case 'dev':
        return require('./dev.env').default;
      case 'prod':
        return require('./prod.env').default;
      default:
        return {};
    }
  })(),
},

3. 验证部署/本地运行

  • 本地dev环境运行命令保持不变:
serverless offline start --httpPort 3171 --lambdaPort 3172 --stage dev --noTimeout

此时SLS_STAGE会被设置为dev,自动加载dev.env的配置。

  • prod部署命令保持不变:
serverless deploy -s prod --aws-profile my_profile 

框架会自动设置SLS_STAGE=prod,加载prod.env的配置。

可选优化:使用serverless-dotenv-plugin(更优雅的管理方式)

如果希望简化多环境变量管理流程,可以使用serverless-dotenv-plugin:

  1. 安装插件:
npm install serverless-dotenv-plugin --save-dev
  1. 在serverless.ts的plugins数组中添加该插件:
plugins: ['serverless-esbuild', 'serverless-offline', 'serverless-dotenv-plugin'],
  1. 在custom配置中指定环境文件规则:
custom: {
  // ...保留其他原有配置
  dotenv: {
    path: './.env.${self:provider.stage}'
  }
},
  1. 重命名.env文件为.env.dev和.env.prod,文件内容直接写键值对(无需导出):
# .env.dev
DB_CONNECTION_STRING=dev-db-url
API_SECRET=dev-secret

框架会根据当前stage自动匹配并加载对应环境的.env文件,无需手动编写switch逻辑。


内容的提问来源于stack exchange,提问作者Sreehari S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:52:36