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

NestJS导出常量ApiConfig引用异常:本地环境出现ReferenceError排查

本地环境ApiConfig.ApiKey获取异常原因分析

config.ts

export const ApiConfig = {
  ApiKey: process.env.TEST_API_KEY,
  ApiSecret: (process.env.STAGE === 'PROD') ? 'prod_key' : 'local_key'
}

service.ts

import { ApiConfig } from '../config'

@Injectable()
export class TestService {

  constructor() { }

  private readonly API_KEY = ApiConfig.ApiKey;
  private readonly SECRET_KEY = ApiConfig.ApiSecret;

  async func1() {
    const params = {
      property1: this.API_KEY,
      property2: this.SECRET_KEY,
    }
    ....
    return result;
  }
}

问题现象

本地环境运行时出现异常:

  • property1值为undefined,但property2可正确获取prod_key或local_key
  • 调试确认process.env.TEST_API_KEY存在有效值,但ApiConfig抛出"uncaught referenceError"
  • EC2生产环境中两个属性均能正常获取预期值

可能的原因

  • 环境变量加载顺序滞后:本地开发如果用dotenv等工具管理环境变量,若没在项目入口文件(如main.ts)最顶部执行dotenv.config(),会导致config.ts在环境变量注入前就被加载,此时process.env.TEST_API_KEY还未赋值;而ApiSecret是静态条件判断生成的,不受加载顺序影响。EC2环境的变量是系统层面提前注入的,不存在这个问题。
  • 模块初始化顺序差异:本地TS编译或开发服务器的模块加载逻辑,导致TestService的初始化早于config.ts完成环境变量读取。API_KEY是在类初始化时直接赋值的,此时ApiConfig.ApiKey还没拿到环境变量值;ApiSecret是静态计算的,不受初始化时间影响。
  • 热重载缓存干扰:本地开发用了热重载工具(如nodemon),旧的config.ts缓存未刷新,导致新的环境变量没被读取,重启开发服务即可验证。
  • 环境变量大小写/拼写问题:虽然调试时看到变量存在,但要确认config.ts中写的TEST_API_KEY和本地.env文件里的变量名完全一致(包括大小写),部分系统对环境变量大小写敏感。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:42:40