如何判断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
相关产品推荐
相关产品推荐

