Azure DevOps构建React应用时错误加载环境文件问题求助
检查dotenv参数的位置是否正确
你当前命令中dotenv_config_path=.env.$(ENVIRONMENT)放在了build之后,这属于react-scripts的命令参数,但dotenv_config_path是node加载dotenv模块时的配置项,应该放在react-scripts脚本路径之前。正确的命令格式应该是:node -r dotenv/config dotenv_config_path=.env.$(ENVIRONMENT) node_modules/react-scripts/bin/react-scripts.js --max_old_space_size=4096 build位置错误会导致dotenv没有加载你指定的文件,可能 fallback 到了其他环境配置。
检查React Scripts自带的环境变量加载逻辑是否叠加
React-scripts会自动加载特定命名的.env文件,比如.env、.env.local、.env.${NODE_ENV}等。如果你的构建环境中NODE_ENV设置为production,它会自动加载.env.production,如果这个文件存在且包含Environment2的配置,就会和你手动加载的文件变量叠加。可以在构建前明确设置NODE_ENV,或者检查是否存在这类默认加载的.env文件。验证$(ENVIRONMENT)变量的实际取值
查看Azure DevOps构建日志,确认$(ENVIRONMENT)变量实际输出的值是否为Environment1,是否存在大小写错误(比如实际输出environment1,但你的文件是.env.Environment1),导致加载了错误的文件或未加载到目标文件,进而使用了其他环境的配置。检查构建目录的缓存/残留文件
Azure DevOps代理可能会缓存之前的构建产物,若之前构建过Environment2且未清理build目录,新构建的文件可能和旧文件混在一起。在构建任务前添加清理步骤:- script: rm -rf build displayName: "Clean build directory"或者检查构建任务是否启用了缓存,确保不会复用旧的构建产物。
检查.env文件的语法正确性
Dotenv默认使用=作为键值分隔符,你当前的.env文件用的是:,可能导致变量未被正确解析,进而React项目 fallback 到其他环境的配置。将文件中的:替换为=:REACT_APP_API_URL="env1's api url" REACT_APP_FEATURE_1=true排查是否存在其他加载环境变量的逻辑
检查项目中是否有其他代码或脚本(比如prebuild脚本)在加载.env文件,这些逻辑可能在你指定的dotenv加载之前或之后,加载了Environment2的配置,导致变量被覆盖或合并。
内容的提问来源于stack exchange,提问作者AppSupportGuru1995

