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

如何判断Node.js应用是否运行在Azure环境并加载对应jest配置?

Node.js 判断 Azure 运行环境并加载对应 jest 配置方案

环境判断逻辑

Azure 托管的所有 Node.js 运行环境(App Service、Functions、Static Web Apps 后端等)都会预设专属的环境变量,直接读取这些变量判断是最准确的方案:

  • WEBSITE_SITE_NAME:Azure 应用服务、函数应用、静态 Web 应用的通用标识变量,存在即代表运行在上述 Azure 托管服务中
  • FUNCTIONS_WORKER_RUNTIME:Azure Functions 专属变量,值为 node 时代表是 Node.js 运行时的 Azure 函数
  • 自定义变量:如果是自行部署在 Azure VM/容器实例中,可以在部署时主动注入 RUNNING_ON_AZURE=true 这类自定义环境变量,适配非托管服务的场景

判断函数示例:

function isRunningOnAzure() {
  // 按需添加你需要的判断条件
  return !!(
    process.env.WEBSITE_SITE_NAME
    || process.env.FUNCTIONS_WORKER_RUNTIME
    || process.env.RUNNING_ON_AZURE
    // 如果需要适配 Azure 流水线运行jest的场景,可以加下面的条件
    || process.env.TF_BUILD
  );
}

结合 jest 加载对应环境配置

可以直接在 jest 的前置配置文件(通常为 jest.setup.js)中加入配置加载逻辑,配合 dotenv 读取不同的 env 文件:

const dotenv = require('dotenv');
const fs = require('fs');
const path = require('path');

function isRunningOnAzure() {
  return !!(process.env.WEBSITE_SITE_NAME || process.env.FUNCTIONS_WORKER_RUNTIME || process.env.RUNNING_ON_AZURE);
}

// 按环境匹配配置文件路径
const targetEnvPath = isRunningOnAzure() 
  ? path.resolve(__dirname, '.env.azure') 
  : path.resolve(__dirname, '.env.local');

// 加载配置
if (fs.existsSync(targetEnvPath)) {
  dotenv.config({ path: targetEnvPath });
} else {
  throw new Error(`未找到对应环境的配置文件:${targetEnvPath}`);
}

之后记得在 jest.config.js 中把上述文件加入 setupFiles 配置项即可:

module.exports = {
  // 其他jest配置...
  setupFiles: ['./jest.setup.js']
}

注意事项

  • 不要依赖端口、IP 段这类不稳定的特征做判断,环境变量是官方提供的最可靠的判断依据
  • 如果有特殊部署场景,优先用自定义注入的环境变量做判断,灵活性更高
  • 如果是在 Azure Pipeline 中运行单测,可将 Azure 流水线预设的 TF_BUILD 变量加入判断逻辑,适配 CI 场景的配置加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:27:01