EC2实例中Node.js用dotenv时baseUrl不符合环境预期的问题
问题排查方案
1. 检查dotenv加载时机是否滞后于constant.ts的导入
如果你的constant.ts在dotenv.config()执行前就被导入,那么constant里的判断会基于初始的process.env.NODE_ENV(可能是undefined或开发环境默认值),后续dotenv加载的production值不会影响已经计算完成的baseUrlBE。
错误顺序示例:
// 先导入constant,再加载dotenv import { baseUrlBE } from './constant'; import dotenv from 'dotenv'; dotenv.config();
正确顺序示例:
// 先加载dotenv,再导入constant import dotenv from 'dotenv'; dotenv.config(); import { baseUrlBE } from './constant';
2. 确认constant.ts的判断逻辑是否存在语法错误
仔细检查判断代码,比如是否写错变量名、用赋值符号替代比较符号:
错误示例:
// 误用=赋值而非===比较 export const baseUrlBE = process.env.NODE_ENV = 'production' ? 'http://mySite:8000/' : 'http://localhost:8000';
正确示例:
export const baseUrlBE = process.env.NODE_ENV === 'production' ? 'http://mySite:8000/' : 'http://localhost:8000';
3. 检查.env文件是否存在格式问题
确认.env文件里的变量没有多余空格,比如NODE_ENV= production(等号后带空格)会导致process.env.NODE_ENV的值为' production'(带空格),和'production'严格比较不相等。
4. 验证dotenv是否加载了正确的.env文件
如果你的.env文件不在项目根目录,需要手动指定路径,否则dotenv会加载默认位置的文件(可能不是你EC2实例上的目标文件):
dotenv.config({ path: '/home/ec2-user/your-project/.env' });
5. 检查TypeScript编译后的代码一致性
如果是编译TypeScript后部署,直接查看编译生成的constant.js文件,确认判断逻辑是否和TS源码一致,避免编译过程中出现逻辑篡改。
内容的提问来源于stack exchange,提问作者Bennyh961
相关产品推荐
相关产品推荐

