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
相关产品推荐
相关产品推荐

